我想在运行时加载程序集,但我不确定为什么我不能在程序集中使用静态方法创建类型的实例Activator.CreateInstance()
。它适用于Assembly.CreateInstance()
。在运行时加载程序集并使用Activator.CreateInstance()创建实例
string assemblyFilename = "MyAssembly.dll";
string assemblyName = "MyAssembly";
string typeName = "MyAssembly.MyType";
FileInfo fileInfo = new FileInfo(assemblyFilename);
这工作:
var assembly = Assembly.LoadFrom(assemblyFilename);
Form form = (Form)assembly.CreateInstance(typeName);
但是,这并不工作:
Assembly.LoadFrom(assemblyFilename);
Form form = (Form)Activator.CreateInstance(assemblyName, typeName).Unwrap();
FileNotFoundException异常抛出:
无法加载文件或程序集 'MyAssembly程序' 或一个它的 依赖IES。该系统找不到指定的文件。
编辑:
在这两种情况下,Assembly.LoadFrom()
电话后,我可以看到,当我看着我的AppDomain.CurrentDomain.GetAssemblies()
组件已经加载。
AppDomain.CurrentDomain.Load(File.ReadAllBytes(assemblyFileName));
编辑:
第二个版本应该指定一个完整的程序集名称,而不仅仅是显示名称,并使用Assembly.Load()。与LoadFrom()不同。使用fuslogvw.exe排除故障 –
正如“MyAssembly,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 5dc3e20777fed081”一样?我得到了同样的错误 – davenewza
我甚至直接从GetAssemblies()中的“MyAssembly”复制了FullName,并且它仍然不起作用。如此迷茫! – davenewza