【问题标题】:Generate .NET Standard 2.0 DLL using Roslyn CSharpCompilation使用 Roslyn CSharpCompilation 生成 .NET Standard 2.0 DLL
【发布时间】:2017-12-13 02:49:25
【问题描述】:

我正在开发一个服务,给定一个 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 的等效步骤。

【问题讨论】:

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

标签: c# .net .net-core roslyn .net-standard


【解决方案1】:

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

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

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

可能有更简单的方法来做到这一点 - 我很高兴听到它!

【讨论】:

  • 你能把你放的所有 MetadataReference 的代码放在这里吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
相关资源
最近更新 更多