C# 使用Roslyn CSharp编译生成.NET标准2.0 DLL

C# 使用Roslyn CSharp编译生成.NET标准2.0 DLL,c#,.net,.net-core,roslyn,.net-standard,C#,.net,.net Core,Roslyn,.net Standard,我正在开发一个服务,该服务提供了一个指向Swagger定义的URL,使用NSwag为该服务生成一个C#代理。整个代理包含在一个C#文件中 我想使用Roslyn将生成的代码自动编译成.NET标准2.0 DLL。这应该在内存中使用CSharpCompilation类完成 为了确认这是可能的,我在Visual Studio 2017中创建了一个.NET标准2.0类库项目,并为Newtonsoft.Json(10.0.3)和System.ComponentModel.Annotations(4.4.0)

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

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

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


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

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

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

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


也许有一个更简单的方法来做到这一点-我很高兴听到它

你为什么不使用项目文件呢?这样会更容易。我还没有看到任何可以输入项目文件的示例,你能将我链接到一个吗?只需使用dotnet cli。我正在尝试使用csharp编译库来自动化这个过程。因此,代理代码在内存中生成和编译,然后保存为DLL。也许这在我的问题中还不够清楚,我已经更新了它。你能在这里放一个你放的所有MetadataReference的代码吗。