Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用Roslyn生成程序集_.net_.net Core_Roslyn - Fatal编程技术网

.net 使用Roslyn生成程序集

.net 使用Roslyn生成程序集,.net,.net-core,roslyn,.net,.net Core,Roslyn,有没有可能用Roslyn构建一个.NET核心或更好的.NET标准库,可以从另一个项目中引用 我的目标是在服务器上构建一个程序集,并让人们下载它,以便他们可以在自己的VisualStudio项目中引用和使用它 我正在使用Roslyn生成C代码并进行编译。 当我将编译结果“发出”到内存流,从该内存流加载程序集并使用反射执行代码时,这似乎可以正常工作 using (var ms = new MemoryStream()) { var compilationResult = compilatio

有没有可能用Roslyn构建一个.NET核心或更好的.NET标准库,可以从另一个项目中引用

我的目标是在服务器上构建一个程序集,并让人们下载它,以便他们可以在自己的VisualStudio项目中引用和使用它

我正在使用Roslyn生成C代码并进行编译。 当我将编译结果“发出”到内存流,从该内存流加载程序集并使用反射执行代码时,这似乎可以正常工作

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显示:

我希望使用.net标准或.net核心程序集。此外,我无法通过引用Visual Studio中另一个项目中的程序集来使用此程序集

  • 是否可以使用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,添加目标框架属性成功了!