我在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引用...
在我的Web应用程序中,事情变得更糟:当我从Library
文件夹中选择CR XI运行时程序集时,VS2010自动似乎检测到有类似文件(同名,但不同) GAC中的版本)并使用这些文件 - 现在我的网络应用程序不再起作用了......
VS 2010在这里发生了什么?为什么不能单独留下我的选择并让我从Library
文件夹中选择我的运行时文件而不是坚持要去GAC?在这方面,VS 2008和VS 2010之间发生了什么变化?有没有人对此有任何见解??
答案 0 :(得分:1)
它可能有用
(1)转到Tools \ Options \ Project& Solutions \ Build& Run并将MSBuild verbosity更改为'diagnostic',然后构建并在Output窗口中查看MSBuild参考分辨率逻辑如何为这些程序集工作。也就是说,如果VS还没有对底层的.csproj文件做过一些荒谬的事情
(2)比较VS2008项目文件中的XML与VS2010项目文件中的XML,以查看<Reference>
节点中的内容
一个疯狂的推测猜测:VS2010项目的目标是“.NET 4.0 Client”(而不是“.NET 4.0(完整框架)”,并且库需要完整的框架,MSBuild看到这种依赖关系并使用回退逻辑