【发布时间】:2017-03-05 19:21:11
【问题描述】:
如果不能,这可能吗?有人可以解释一下我如何实现它吗?
所以我有一个 C# 应用程序和一个名为模块的文件夹,所以文件:
Application.exe
modules/
Application.Handler.ModuleName.dll
因此,在 DLL 内部,它的命名空间 Application.Handle 包含类型 ModuleName 和 ModuleName 扩展了在 Application.exe 中实现的 Handler,因此编译需要 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 的字符串中实现类型,但我不确定我是否正确地执行它或者我尝试实现它的方式是否有效?
更新
我可能不清楚,但实际上我需要做的是
Application.Handler handler = new Application.Handler.ModuleName()Application.Handler.ModuleName 在 php 中的操作如下所示,我认为会有一个系统返回字符串中给定类型的对象。如果不存在则抛出异常
$className = "\Application\Handler\ModuleName";
$instance = new $className();
我也尝试过使用@rene 建议的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,但它必须将程序集的清单加载为 Application.Handler.ModuleName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
【问题讨论】:
标签: c# dll .net-assembly