项目参考DLL版本地狱

Mr *_*ubs 19 .net dll assemblies reference visual-studio-2008

我们在让visual studio从我们的一个项目中获取最新版本的DLL时遇到了问题.

我们有多个类库项目(例如BusinessLogic,ReportData)和许多Web服务,每个都有一个我们编写的连接DLL的引用(这是对连接DLL的引用问题).

我们总是在bin/debug文件夹中指向DLL的引用(这是我们总是为任何给定项目构建的),所有自定义DLL引用都有CopyLocal = True和SpecificVersion = False

ReportData有一个对业务逻辑的引用(它也引用了连接 - 我不明白为什么这会导致问题,但是认为值得一提)

奇怪的是,当您单击"添加引用"并浏览到连接/ bin/debug时 - 将鼠标悬停在DLL文件上,将显示正确的(最新)版本(版本和文件版本总是一起递增),但是单击"确定"时,会拉出先前的版本号.即使我查看当前项目调试文件夹(其中copy local将在编译后放置DLL)显示最新版本号. - NO我在哪里可以找到Visual Studio之外的以前版本的DLL,但在该项目中引用它具有旧版本 - 即使路径是正确的.

我不知道它可能从哪个版本获得旧版本.甚至为什么它想要那个.

这可能是我遇到的最令人沮丧的问题.

有谁知道如何确保最新版本被拉过(最好是自动或编译).

编辑:

虽然不完全是我正在处理的场景,但我正在阅读这篇文章,并在某处提到CLR忽略修订号.可以理解(尽管之前这不是问题 - 我们正在修订版本39),所以我想我会更新内部版本号,仍然无法正常工作.虽然我会更新次要版本号并查看是否有任何区别,但徒劳无功.

我不是说这是答案,因为我必须首先检查一些事情,但从表面上看,这似乎解决了我的问题......

进一步编辑:在其他类库中,这似乎已经解决了问题,但是在测试Windows应用程序中,它仍然通过以下版本提取:(

如果我再次增加次要版本号,同样的问题又回来了,我留下了错误的版本.

进一步编辑 - 我创建了一个新的项目,添加了一个参考,但仍然有完全相同的问题.这表明问题仅限于我引用的项目.希望我知道为什么!

以前有人遇到过这个问题,知道如何解决这个问题吗?

救命!

Dar*_*rov 37

为了避免dll地狱,我建议你lib在项目中创建一个文件夹,并将所有共享程序集放在这个文件夹中.接下来,仅从此文件夹添加引用.通过这种方式,您的项目是自包含的,并且您确切地知道从中挑选引用的位置.如果要使用较新版本更新某个程序集,请将其复制到该lib文件夹并重建项目.

还要确保您没有将引用的程序集放入GAC中,因为它们可能首先被选中.

  • 如果GAC中没有任何版本的程序集,并且您已在项目的Reference列表中删除了对库的引用,并将其重新添加到仅指向/ lib文件夹中的dll,则该版本无法进行任何操作除了该文件夹中的内容之外,除非您没有对解决方案中具有DLL引用的所有项目执行相同的过程.需要引用该DLL的每个项目都需要使用本地/ lib文件夹. (3认同)
  • 我希望你是正确的,但你不是:( (2认同)

san*_*kar 9

您可以尝试几种选择.

  1. 编译项目并在输出窗口中查看以确认准确引用它的装配路径.
  2. 在重新编译之前删除Obj文件夹.
  3. 关闭并重新打开Visual Studio,因为VS有一些奇怪的行为来保持缓存以容纳Dll引用.
  4. 如果您仍然看到问题,请使用此工具检查参考组件的确切位置.Process Explorer.


Mr *_*ubs 8

为了解决这个问题,我删除了每个引用,然后再将它们全部添加回来.我不知道为什么这是解决方案.

在一个项目中,DLL可能是不正确的,并且这是由visual studio提取并使用的不正确的DLL.

编辑:其他时候发生此错误是由于当前项目中引用的DDL(A)也被另一个DLL(B)引用.不重建这个其他DLL(B)似乎阻止VS在当前项目中引用正确版本的DLL(A),因此它带来了旧版本的DLL(A).