如何引用具有相同名称的不同程序集?

时间:2010-08-16 09:34:12

标签: .net visual-studio-2008

我有2个不同的程序集,我需要添加到项目中。

当我尝试添加对项目的两个引用时,visual studio告诉我已经引用了程序集(因为已经有一个具有相同名称的程序集)。

我尝试重命名其中一个文件。我可以添加两个引用,但是当从重命名的程序集访问方法时,解析它会失败(因为.net尝试使用原始名称加载程序集)。

注意:组件不是我的,因此我无法更改其内容。

2 个答案:

答案 0 :(得分:4)

如果他们签名很强并且拥有不同的公钥,你可以试试这个:

有一个单独的库项目用于包装两个程序集中的一个。这样你可以为其中一个选择一个不同的名称和命名空间,然后直接引用两个组件中的一个,另一个间接引用它们。

挑战在于,如果两个程序集具有相同的文件名,则在运行时期间不能将它们放在同一文件夹中。由于它们是强签名的,您可以将它们都放入全局程序集缓存(GAC)中,或者您可以在运行时将其中一个放入子文件夹中,并将该子文件夹添加到探测路径中。

祝你好运!

答案 1 :(得分:1)

另一个选择是使用ildasm来反汇编其中一个程序集,然后使用ilasm以不同的名称将它组装回来。

例如,要在同一个程序集中添加2个引用,在我的系统上执行以下操作(Windows 7,64位,因此请相应地调整路径)

d:\Sandbox>"c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe" /all /out=SandboxLib2.il SandboxLib.dll

接着是

d:\Sandbox>"c:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe" /dll SandboxLib2.il

在此之后,我有另一个名为SandboxLib2.dll的程序集。即使它与第一个程序集相同,我也可以在项目中添加对.dll的引用。