使用 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 控制台应用程序引用它来测试我的输出程序集。
可能有更简单的方法 - 我很乐意听到!
我正在开发一项服务,给定一个 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 控制台应用程序引用它来测试我的输出程序集。
可能有更简单的方法 - 我很乐意听到!