问候,
我有一个允许用户导入他们创建的库(.NET DLL)的应用程序,只要该库符合我给出的特定指南(使用我的命名空间,使用我的属性修饰方法等等)。 )。我将每个用户lib复制到一个内部目录,然后将其加载到自己的应用程序域中(因此用户可以根据需要卸载它)。因此,我有一个限制,你不能加载两个同名的库。
我想删除此限制,而不将每个用户lib放入我的内部目录的唯一子目录中。我将用户lib重命名为内部目录时尝试重命名。例如,如果用户说要导入c:\ SomeLib.dll并且我检测到我已经加载了名为SomeLib.dll的lib,我将新文件复制到... \ MyInternalDir \ SomeLib2.dll。但是,当我这样做时,我的加载命令:
(ISomeInterface) iSomeLib = someAppDomain.CreateInstanceAndUnwrap(
"SomeLib2",
"SomeNamespace.SomeClassInSomeLib");
抛出异常:
FileLoadException:无法加载文件 或汇编'MyLib2'或其中一个 依赖。定位组件 清单定义与之不匹配 装配参考。 (例外 HRESULT:0x80131040)
有没有办法告诉.NET“忽略文件名自编译以来已被更改的事实?”
答案 0 :(得分:1)
您是否考虑过重载:
someAppDomain.CreateInstanceFrom(string assemblyFile, string typeName)
鉴于您知道新的dll名称,因为您进行了重命名,您可以要求App Domain从指定的dll创建实例。这样它.Net就不应该关心程序集名称和程序集文件名是否匹配。
我应该以“我实际上没有尝试过”开头,但这只是一个建议!