当我在我的解决方案中包含一些项目并更改对Project References的引用时,有时它仍然加载了错误的程序集,因为还有其他东西将其称为FIRST,并且该东西不包含在我的解决方案中。当项目数量增加时,找到那些项目变得越来越难......你是谁处理的?
答案 0 :(得分:1)
我使用Lexware程序集参考工具...在VS的“工具”菜单下为您提供了一个菜单选项,可以让您查看引用是汇编还是项目引用,dll的提示路径,copy-local,specific-version和其他参考属性。它还允许您在一个窗口中编辑这些属性。
Visual Studio 2010的http://assemblyreftool.codeplex.com/
Visual Studio 2005/2008的http://www.codeproject.com/KB/macros/Lexware_AssemblyReference.aspx
另请注意:如果项目有项目引用,并且您在解决方案中有该项目,但未包含引用的项目,则不会构建引用的项目,并且您将在bin中使用本地复制的dll引用项目的文件夹(即引用项目的最后一次成功构建)。如果引用项目的dll没有本地副本,则构建将失败。
如果在构建顺序的层次结构中,首先编译了一个项目,但是引用的dll的构建版本较旧,那么就是你为更高版本构建而陷入困境的项目。原因是引用的dll被复制到bin文件夹。因此,当第二个项目编译时,它会查找对根编译项目中最低dll的引用,并发现bin文件夹中已有一个副本(虽然是旧版本)。
解决方案:
(1)在您的解决方案中包括引用的项目本身
(2)将项目引用更改为dll引用,并引用您独立编译的本地受控版本
(3)手动更改项目的构建顺序(不推荐)
希望能够明确表达的图表:
Solution
|
--Project 1 (references project 2 and project 3)
| \bin
|
|
--Project2
| \bin
| \proj4.dll (v1.5)
|
--Project 3
\bin
\proj4.dll (v1.2)
当解决方案构建时,项目1首先强制编译项目3,并将所有相关的dll复制到其bin文件夹。结构现在看起来像:
Solution
|
--Project 1 (references project 2 and project 3)
| \bin
| \proj3.dll
| \proj4.dll (v1.2)
|
|
--Project2
| \bin
| \proj4.dll (v1.5)
|
--Project 3
\bin
\proj4.dll (v1.2)
项目2接下来被编译,但是因为默认情况下特定版本设置为false,项目1将在其bin目录中看到它已经有一个版本的proj4.dll,这对于项目2来说已经足够了。因此它只会复制proj2.dll,结构如下:
Solution
|
--Project 1 (references project 2 and project 3)
| \bin
| \proj2.dll
| \proj3.dll
| \proj4.dll (v1.2)
|
|
--Project2
| \bin
| \proj4.dll (v1.5)
|
--Project 3
\bin
\proj4.dll (v1.2)
如果他们不同意,请随时纠正我。但我很确定这就是你看到你所看到的东西的原因(如果我理解了这个问题)。