1

问候,

我有一个允许用户导入他们创建的库(.NET DLL)的应用程序,只要该库符合我给他们的特定准则(使用我的命名空间,用我的属性装饰方法等)。我将每个用户库复制到内部目录,然后将其加载到自己的应用程序域中(以便用户可以根据需要卸载它)。因此,我有一个限制,你不能加载两个同名的库。

我想消除这个限制,而不是将每个用户库放入我内部目录的唯一子目录中。当我将它复制到我的内部目录时,我尝试重命名用户库。例如,如果用户说要导入 c:\SomeLib.dll,而我检测到我已经加载了一个名为 SomeLib.dll 的库,我将新文件复制到 ...\MyInternalDir\SomeLib2.dll。但是,当我这样做时,我的加载命令:

(ISomeInterface) iSomeLib = someAppDomain.CreateInstanceAndUnwrap(
                                    "SomeLib2", 
                                    "SomeNamespace.SomeClassInSomeLib");

抛出异常:

FileLoadException:无法加载文件或程序集“MyLib2”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

有没有办法告诉.NET“忽略文件名自编译以来已更改的事实”?

4

1 回答 1

1

您是否考虑过尝试重载:

someAppDomain.CreateInstanceFrom(string assemblyFile, string typeName)

鉴于您知道新的 dll 名称,因为您进行了重命名,您可以要求 App Domain 从指定的 dll 创建实例。这样,.Net 不应该关心程序集名称和程序集文件名是否匹配。

我应该以“我实际上没有尝试过”作为开头,但这只是一个建议!

于 2010-01-07T21:33:24.723 回答