Dav*_*New 12 .net c# reflection
我试图在运行时加载程序集,我不确定为什么我不能使用静态在程序集中创建类型的实例Activator.CreateInstance().它适用于Assembly.CreateInstance().
string assemblyFilename = "MyAssembly.dll";
string assemblyName = "MyAssembly";
string typeName = "MyAssembly.MyType";
FileInfo fileInfo = new FileInfo(assemblyFilename);
Run Code Online (Sandbox Code Playgroud)
这有效:
var assembly = Assembly.LoadFrom(assemblyFilename);
Form form = (Form)assembly.CreateInstance(typeName);
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
Assembly.LoadFrom(assemblyFilename);
Form form = (Form)Activator.CreateInstance(assemblyName, typeName).Unwrap();
Run Code Online (Sandbox Code Playgroud)
抛出FileNotFoundException:
无法加载文件或程序集"MyAssembly"或其依赖项之一.该系统找不到指定的文件.
编辑:
在这两种情况下,在Assembly.LoadFrom()调用之后,我可以看到当我查看时我的程序集已被加载AppDomain.CurrentDomain.GetAssemblies().
您可以使用他的路径调整文件
var path = Assembly.GetAssembly(MyType.GetType()).Location;
var thisAssembly= Assembly.LoadFrom(path);
var TypeName = "";
Type type = thisAssembly.GetType(TypeName);
object instance = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)
您必须首先将程序集加载到当前的 AppDomain 中:
AppDomain.CurrentDomain.Load(File.ReadAllBytes(assemblyFileName));
Run Code Online (Sandbox Code Playgroud)
编辑:这有效吗?
Form form = (Form)Activator.CreateInstance(Type.GetType(typeName))
Run Code Online (Sandbox Code Playgroud)