使用 Roslyn CSharpCompilation 生成 .NET Standard 2.0 DLL

Generate .NET Standard 2.0 DLL using Roslyn CSharpCompilation

我正在开发一项服务,给定一个 Swagger 定义 URL,使用 NSwag 为该服务生成一个 C# 代理。整个代理包含在一个 C# 文件中。

我想使用 Roslyn 将生成的代码自动编译为 .NET Standard 2.0 DLL。这应该在内存中完成,使用 CSharpCompilation class.

为了确认这是可能的,我在 Visual Studio 2017 年创建了一个 .NET Standard 2.0 class 库项目,并为 Newtonsoft.Json (10.0.3) 添加了 NuGet 依赖项,并且System.ComponentModel.Annotations (4.4.0)。我可以看到项目类型还引入了对 NETStandard.Library.

的 SDK 依赖

我知道我不会使用项目文件通过 Roslyn 生成 DLL,但是,我正在努力找出生成相同 DLL 的等效步骤。

构建 .NET Standard DLL 的关键是选择正确的 DLL 作为 MetadataReference 对象添加。我最初并不清楚这些是什么,因为 Visual Studio 2017 .csproj 格式没有明确引用它们。

我能够下载 netstandard.library 的 NuGet 包并循环浏览内容,将每个 DLL 添加到其中作为元数据引用。我相信这实现了与在 NetStandard.Library.

上添加 .csproj SDK 依赖项相同的目标

通过添加这些引用,我能够编译我生成的代码。我通过从 .NET Core 2.0 控制台应用程序引用它来测试我的输出程序集。

可能有更简单的方法 - 我很乐意听到!