使用Roslyn CSharpCompilation生成.NET Standard 2.0 DLL

Ala*_*ark 2 .net c# roslyn .net-core .net-standard

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

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

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

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

Ala*_*ark 6

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

我能够下载netstandard.library的NuGet包并循环遍历内容,将每个DLL内部添加为MetadataReference.我相信这实现了与在NetStandard.Library上添加.csproj SDK依赖项相同的目标.

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

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

  • 您能否在此处放置所有放置的MetadataReference的代码。 (3认同)