这是否可能,如果没有,请解释我如何实现这个工作?
所以我有一个C#应用程序和一个名为modules的文件夹,所以文件:
Application.exe
modules/
Application.Handler.ModuleName.dll
因此,在DLL内部,它具有名称空间Application.Handle
,其中包含在Application.exe中实现的类型ModuleName
和ModuleName
extends Handler
,因此要编译需要{{1作为参考。
在我的主机应用程序中,我有:
Application.exe
但是我不确定我是否可以使用 string[] dirs = Directory.GetFiles(@"modules/", "Application.Handler.*.dll");
foreach(string filePath in dirs)
{
Assembly.LoadFile(new FileInfo(filePath).FullName);
string fileName = filePath.Split('/').Last();
string typeAssemblyName = fileName.Replace(".dll", "");
string typeName = typeAssemblyName.Split('.').Last();
}
我可以实现的字符串来实现类型但是我不确定我是否正确地执行它或者我是否正在尝试实现它有效吗?
更新
我可能不太清楚,但实际上我需要做的是
Activator.CreateInstance
在php中Application.Handler handler = new Application.Handler.ModuleName()
如下所示,我认为会有一个系统返回字符串中给定类型的对象。如果它不存在抛出异常
Application.Handler.ModuleName
我也尝试过使用@rene建议的$className = "\Application\Handler\ModuleName";
$instance = new $className();
系统
Unwrap
使用此方法我给它Assembly asm = Assembly.LoadFile(new FileInfo(filePath).FullName);
string fileName = filePath.Split('/').Last();
string typeAssemblyName = fileName.Replace(".dll", "");
string typeName = typeAssemblyName.Split('.').Last();
FrameHandler fh;
fh = (FrameHandler)Activator.CreateInstance(asm.FullName, typeAssemblyName).Unwrap();
fh.RegisterHandlers();
名称,它给了我一个Assembly
而没有FileNotFoundException
名称我得到Assembly
但它必须加载清单程序集为TypeLoadException
答案 0 :(得分:1)
您只需要一个类型的句柄,因此您需要装配路径和类型的全名。
var assy = Assembly.LoadFile("...");
var type = assy.GetType("...");
var obj = Activator.CreateInstance(type);