0

我有一个这样的项目:

测试解决方案

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)中并且它会尝试调用版本 1.0.0.0 dll 中的函数...

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

我尝试使用“外部别名”无济于事......

4

5 回答 5

2

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

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

于 2009-06-10T15:47:02.920 回答
0

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

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

于 2009-06-10T15:47:35.523 回答
0

您可以“强制”它调用正确 DLL 的唯一方法是引用正确的 DLL,即您需要删除对 v1.0.0.0 的引用并添加对 v1.0.0.1 的引用

于 2009-06-10T15:52:15.093 回答
0

您必须签署您的程序集(给它们一个强名称),并将它们放在 GAC 中,或者如果您使用的是 Visual Studio,则必须将两个不同的版本构建到不同的输出文件夹中,并设置引用到文件路径,而不是项目输出。然后在引用的属性中,您可以将特定版本更改为 true。

于 2009-06-10T16:01:04.267 回答
0

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

我不知道其他一些答案是否也会起作用,因为我没有太多时间来测试它们。对不起人们。谢谢您的帮助!

于 2009-06-15T07:07:05.230 回答