简体   繁体   English

如何在.NET Core中从流加载程序集

[英]How to load assembly from stream in .NET Core

I am experiencing with Roslyn on a .NET Core console application. 我在.NET Core控制台应用程序上遇到Roslyn。 I tried to create an assembly and compile it into a memory stream. 我试图创建一个程序集并将其编译为内存流。 But loading it seems to be missing an API ( that normally works on the regular .NET Framework ) 但加载它似乎缺少一个API( 通常适用于常规的.NET Framework

var compilation = CSharpCompilation.Create("MyCompilation",
         syntaxTrees: new[] { pocoTree }, references: new[] { mscorlib, currentAssembly });

var ms = new MemoryStream();
var emitResult = compilation.Emit(ms);

var ourAssembly = Assembly.Load(ms.ToArray()); // Fails to compile here

I get this error: 我收到此错误:

cannot convert from 'byte[]' to 'System.Reflection.AssemblyName' 无法从'byte []'转换为'System.Reflection.AssemblyName'

What is the alternative in .NET Core to load from a steam? .NET Core中从steam加载的替代方法是什么? (other than physically saving the assembly and loading it) (除了物理保存组件并加载它)

You can load the assembly from a stream in .NET core using AssemblyLoadContext : 您可以使用AssemblyLoadContext从.NET核心中的流加载程序集:

// requires "System.Runtime.Loader": "4.0.0",
protected virtual Assembly LoadAssembly(MemoryStream peStream, MemoryStream pdbStream)
{
    return System.Runtime.Loader.AssemblyLoadContext.Default.LoadFromStream(peStream, pdbStream);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM