在引用文件系统中的程序集时,Visual Studio 2008和2010的行为会有所不同?

时间:2010-08-10 06:43:56

标签: visual-studio visual-studio-2008 visual-studio-2010 assembly-references

我在Visual Studio 2010中看到了一个奇怪的现象。

我的项目设置是这样的(我继承了这个 - 不能很快改变它,不幸的是: - ():

  • 使用Crystal Reports X (v10)作为报告引擎的Winforms应用;完整的CR X Developer Edition安装在我的开发箱上

  • 使用Crystal Reports XI (v11)作为报告引擎的几个Webforms应用程序无法安装CR XI完整版,因为它与CR X Dev Edition冲突....

为了让我们的构建服务器工作,我还在Winforms应用程序的项目目录中创建了一个Library文件夹,其中包含我需要的CR X运行时文件,以及里面的Library文件夹带有CR XI运行时文件的Web应用程序项目目录。

在VS 2008中,我能够从Winforms项目(几个类库等)和我的Web应用程序中的相应库文件夹中选择必要的程序集。一切都很好。

当我更新到Visual Studio 2010时,现在我突然看到了:

  • 在我的Winforms应用程序中,所有对CR X运行时文件的引用都在自动更新,以使用GAC的CR X文件 - 这是我想要的!如果我删除这些引用并通过浏览到Library文件夹再次重新添加它们没有帮助 - 当我选择它们时,VS2010似乎会自动将它们转换为GAC引用...

    < / LI>
  • 在我的Web应用程序中,事情变得更糟:当我从Library文件夹中选择CR XI运行时程序集时,VS2010自动似乎检测到有类似文件(同名,但不同) GAC中的版本)并使用这些文件 - 现在我的网络应用程序不再起作用了......

VS 2010在这里发生了什么?为什么不能单独留下我的选择并让我从Library文件夹中选择我的运行时文件而不是坚持要去GAC?在这方面,VS 2008和VS 2010之间发生了什么变化?有没有人对此有任何见解??

1 个答案:

答案 0 :(得分:1)

它可能有用

(1)转到Tools \ Options \ Project&amp; Solutions \ Build&amp; Run并将MSBuild verbosity更改为'diagnostic',然后构建并在Output窗口中查看MSBuild参考分辨率逻辑如何为这些程序集工作。也就是说,如果VS还没有对底层的.csproj文件做过一些荒谬的事情

(2)比较VS2008项目文件中的XML与VS2010项目文件中的XML,以查看<Reference>节点中的内容

一个疯狂的推测猜测:VS2010项目的目标是“.NET 4.0 Client”(而不是“.NET 4.0(完整框架)”,并且库需要完整的框架,MSBuild看到这种依赖关系并使用回退逻辑