Assembly.Load .NET Core

问题描述 投票:10回答:2

我有一个使用AssemblyBuilder.DefineDynamicAssembly动态生成的程序集,但是当我尝试加载它时,我收到以下错误:

System.IO.FileNotFoundException:'无法加载文件或程序集'test,Culture = neutral,PublicKeyToken = null'。该系统找不到指定的文件。'

这是重现的完整代码:

var name = new AssemblyName("test");
var assembly = AssemblyBuilder.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);
var assembly2 = Assembly.Load(name);

我使用的是.NET Core 2.0,2.1和2.2。

有人可以解释为什么会发生这种情况以及任何可能的解决方

c# .net-core .net-assembly
2个回答
1
投票

因为错误

您使用访问模式AssemblyBuilderAccess.Run定义了动态程序集,该程序集不允许保存程序集。然后,您尝试使用Assembly类的Load方法加载程序集,该方法将搜索文件。

如果你想在内存中使用动态程序集,你已经得到了它。下一步是在其他构建器的帮助下定义模块,类型和另一个。

var moduleBuilder = assembly.DefineDynamicModule("test");
var typeBuilder = moduleBuilder.DefineType("someTypeName");
var type = typeBuilder.CreateType();
var instance = Activator.CreateInstance(type);

您将在.NET API Docs找到更多信息。


0
投票

您可以使用它来编码以在.Net Core中动态创建和加载程序集

var fileName = "Test";
var compilation = CSharpCompilation.Create(fileName)
                                    .WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));

compilation.Emit($"{fileName}.dll");

var assemblyLoaded = AssemblyLoadContext.Default.LoadFromAssemblyPath(Path.GetFullPath($"{fileName}.dll"));
© www.soinside.com 2019 - 2024. All rights reserved.