如何知道首先加载哪个项目

时间:2010-10-29 14:41:12

标签: c# compiler-construction

当我在我的解决方案中包含一些项目并更改对Project References的引用时,有时它仍然加载了错误的程序集,因为还有其他东西将其称为FIRST,并且该东西不包含在我的解决方案中。当项目数量增加时,找到那些项目变得越来越难......你是谁处理的?

1 个答案:

答案 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)

如果他们不同意,请随时纠正我。但我很确定这就是你看到你所看到的东西的原因(如果我理解了这个问题)。