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

.net 如何引用具有相同名称的不同程序集?,.net,visual-studio-2008,.net,Visual Studio 2008,我有两个同名的不同程序集需要添加到我的项目中 当我尝试向项目添加两个引用时,VisualStudio告诉我程序集已经被引用(因为已经有一个具有相同名称的程序集) 我试图重命名其中一个文件。我可以添加这两个引用,但当从重命名的程序集访问方法时,解析它失败(因为.net尝试使用原始名称加载程序集) 注意:这些程序集不是我的,因此我无法更改它们的内容。如果它们具有强签名且具有不同的公钥,您可以尝试以下操作: 有一个单独的库项目用于包装两个部件中的一个。这样,您可以为其中一个选择不同的名称和命名空间,然

我有两个同名的不同程序集需要添加到我的项目中

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

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


注意:这些程序集不是我的,因此我无法更改它们的内容。

如果它们具有强签名且具有不同的公钥,您可以尝试以下操作:

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

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


祝你好运

另一种选择是使用ildasm分解其中一个程序集,然后使用ilasm以不同的名称将其重新组装

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

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

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

顺便说一句,如果出现名称冲突,这意味着从中获取程序集的人可能没有遵循命名约定。如果他们不想费心去做那些琐碎的事情,那他们所产生的实际代码又能说明什么呢?创建一个包装项目似乎是最好的选择,但是,在不必为所有类编写存根的情况下公开内部程序集的最佳方法是什么呢,方法和属性?在这种情况下,我会选择包装我需要更少类、方法和属性的方法。除非我做错了什么,否则这样做是不行的。程序集仍将具有原始名称,这意味着实际上我似乎只有文件名,而没有实际的程序集名称。请尝试在重新编译之前更新IL。在nodepad中打开它,并用SandboxLib2替换所有SandboxLib实例的文本。在组装部分,您必须进行一些十六进制编码。
d:\Sandbox>"c:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe" /dll SandboxLib2.il