.net 使用Roslyn生成程序集
有没有可能用Roslyn构建一个.NET核心或更好的.NET标准库,可以从另一个项目中引用 我的目标是在服务器上构建一个程序集,并让人们下载它,以便他们可以在自己的VisualStudio项目中引用和使用它 我正在使用Roslyn生成C代码并进行编译。 当我将编译结果“发出”到内存流,从该内存流加载程序集并使用反射执行代码时,这似乎可以正常工作.net 使用Roslyn生成程序集,.net,.net-core,roslyn,.net,.net Core,Roslyn,有没有可能用Roslyn构建一个.NET核心或更好的.NET标准库,可以从另一个项目中引用 我的目标是在服务器上构建一个程序集,并让人们下载它,以便他们可以在自己的VisualStudio项目中引用和使用它 我正在使用Roslyn生成C代码并进行编译。 当我将编译结果“发出”到内存流,从该内存流加载程序集并使用反射执行代码时,这似乎可以正常工作 using (var ms = new MemoryStream()) { var compilationResult = compilatio
using (var ms = new MemoryStream())
{
var compilationResult = compilation.Emit(ms);
if (compilationResult.Success)
{
ms.Position = 0;
var assembly = AssemblyLoadContext.Default.LoadFromStream(ms);
..
..
Is还可以通过证明Emit方法的路径来“保存”程序集。这将在磁盘上生成一个.dll文件
var compilationResult2 = compilation.Emit(@"D:\testassembly.dll");
我想知道这个.dll文件是什么格式。它似乎不是一个“正常”的组件
我在网上搜索了一下,但找不到有人这样做。我误解了什么吗
因此,我的问题是:
- 文件由Emit创建的格式是什么?它是完整/正常装配吗?我在这里很困惑,因为当我用 DotPeek显示:
- 是否可以使用Roslyn生成可从单独的.net核心项目引用的程序集
谢谢,这可能取决于您如何设置引用(您可能还需要设置程序集名称)。您的编译逻辑是否向源添加了目标框架属性?msbuild项目可以这样做,您可以在
%USERPROFILE%\AppData\Local\Temp\.NETStandard,Version=v2.0.AssemblyAttributes.cs
中找到生成的c文件。除此之外,您还需要注意传递哪些引用程序集进行编译。ref程序集应该来自NETStandard.Library或Microsoft.NETCore.App NuGet包(它们的ref/{TFM}/*.dll
文件)。但是如果没有代码,就很难诊断出问题所在。Emit生成一个正常的IL程序集。这就是csc.exe用于生成输出的内容。感谢@MartinUllrich,添加目标框架属性成功了!