C#dll版本冲突

C#dll版本冲突,c#,dll,reference,version,conflict,C#,Dll,Reference,Version,Conflict,我有一个这样的项目: 试液 Project TestApplication References: TestFunctions.dll(ver 1.0.0.0),Project TestDLL Project TestDLL References: TestFunctions.dll(ver 1.0.0.1) 当我在应用程序中调用TestDLL.Methodx()时 调用TestFunctions.HelloWorld(),但它给出了MissingMethodException

我有一个这样的项目:

试液

Project TestApplication
    References: TestFunctions.dll(ver 1.0.0.0),Project TestDLL
Project TestDLL
    References: TestFunctions.dll(ver 1.0.0.1)
当我在应用程序中调用TestDLL.Methodx()时 调用TestFunctions.HelloWorld(),但它给出了MissingMethodException 因为TestFunctions.HelloWorld()只存在于TestFunctions.dll(版本1.0.0.1)中 它尝试调用ver 1.0.0.0 dll中的函数

如何强制它调用正确的版本


我尝试使用“extern alias”无效…

将引用的dll重命名为TestFunctions1.0.0.dll和TestFunctions1.0.0.1.dll


如果两个引用具有相同的名称,则编译时一个引用将被另一个引用覆盖

我相信Visual Studio一次只允许一个版本的DLL


也许可以尝试在运行时加载1.0.0.1版本-Assembly.Load()-来解决这个问题。

您可以“强制”它调用正确的DLL的唯一方法是引用正确的DLL,也就是说,您需要删除对v1.0.0.0的引用,并添加对v1.0.0.1的引用。您必须对程序集进行签名(给它们一个强名称),然后将它们放在GAC中,或者如果您使用的是Visual Studio,则必须将两个不同的版本构建到不同的输出文件夹中,并将引用设置为文件路径,而不是项目输出。然后在参考的属性中,您可以将特定版本更改为true。

最后,我解决了这个问题,与我的另一个问题一样,根据使用它的项目重命名了
TestFunctions.dll
。这更像是手工操作,但至少是有效的


我不知道其他一些答案是否也适用,因为我没有太多时间来测试它们。对不起大家。谢谢你的帮助

如果我将TestFunctions.dll(版本1.0.0.1)重命名为TestFunctions1.dll,则引用名称会更改,但在代码中(在项目TestDLL中),它找不到TestFunctions,也找不到TestFunctions1。如果您将TestFunctions.dll中的dll重命名为“Assembly Name”,但作为一个在许多项目中使用且经常更改的dll,则此方法有效。是否有其他解决方案或posbuild/prebuild技巧可以轻松使用它?您是否尝试过将(在属性窗口中)引用属性“Specific Version”设置为True?Assembly.Load()在本例中不是选项,因为我将丢失所有intellisense内容,在阅读Assembly.Load()/LoadFrom()/LoadFile()的工作原理后,结果将与静态引用相同,并且它是一个dll,在项目开发过程中,它将仅针对特定项目进行更改(仅当我需要更改dll中的某些函数时)但在某些情况下,testApplication项目需要使用与TestDLL项目中引用的版本不同的TestFunctions.dll版本,因此必须采用这种方式…简单的答案是,这是不可能的-不能将同一dll的两个版本加载到一个进程中,因为这将导致大量的混乱。也许如果您解释了为什么希望能够这样做,我们可以找到一种解决根本问题的方法?=)我无法对TestFunctions.dll进行签名,因为它的某些引用与签名不兼容(或者说visual studio不兼容)。我在两个项目(TestApplication和TestDLL)的TestFunctions.dll引用中指定了“copy local=false”和“specific version=true”,错误相同(MissingMethodException)。我是否错过了你解释的任何步骤?我在回答之前测试了这个,这是一个简单的设置,但它可以工作。确保将引用指向每个版本的TestFunctions.dll的正确路径。TestApplication和TestDLL引用应该不同。。。它们必须指向文件系统上的两个不同位置,与TestFunctions.dll的两个不同版本相匹配。