我正在开发一项服务,在给定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的等效步骤。
答案 0 :(得分:5)
构建.NET标准DLL的关键是选择要添加为MetadataReference对象的正确DLL。我最初并不清楚这些是什么,因为Visual Studio 2017 .csproj格式没有明确引用它们。
我能够下载netstandard.library的NuGet包并循环遍历内容,将每个DLL内部添加为MetadataReference。我相信这实现了与在NetStandard.Library上添加.csproj SDK依赖关系相同的目标。
通过添加这些引用,我能够编译生成的代码。我通过从.NET Core 2.0控制台应用程序引用它来测试我的输出程序集。
可能有一种更简单的方法 - 我很高兴听到它!