我有一个使用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。
有人可以解释为什么会发生这种情况以及任何可能的解决方法吗?
答案 0 :(得分: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中找到更多信息。
答案 1 :(得分: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"));