使用Roslyn CSharpCompilation生成.NET Standard 2.0 DLL

3
我正在开发一个服务,它会根据提供的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。

为什么不使用项目文件 - 这样会更容易。 - Daniel A. White
我还没有看到过可以输入项目文件的示例,你能给我提供一个链接吗? - Alasdair Stark
只需使用dotnet命令行界面。 - Daniel A. White
我正在尝试使用CSharpCompilation库自动化该过程。因此,代理代码是在内存中生成和编译,然后保存为DLL文件。也许我的问题没有表述清楚,我已经更新了它。 - Alasdair Stark
1个回答

5
选择正确的DLL作为MetadataReference对象是构建.NET Standard DLL的关键。起初我并不清楚它们是什么,因为Visual Studio 2017 .csproj格式没有明确引用它们。
我成功下载了netstandard.library NuGet包,并循环遍历其中的内容,将每个DLL作为MetadataReference添加进去。我认为这与在.csproj中添加NetStandard.Library的SDK依赖达到了相同的目标。
通过添加这些引用,我能够编译生成的代码。我通过从.NET Core 2.0控制台应用程序中引用我的输出程序集来测试它。
也许有更简单的方法 - 我很乐意听取建议!

7
你能否在这里放置所有MetadataReference的代码。 - Igor Golodnitsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接