0

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

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

  • 一个使用 Crystal Reports X (v10) 作为其报告引擎的 Winforms 应用程序;我的开发盒上安装了完整的 CR X 开发者版

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

为了在我们的构建服务器上运行,我还在LibraryWinforms 应用程序的项目目录中创建了一个文件夹,其中包含我需要的 CR X 运行时文件,以及LibraryWeb 应用程序的项目目录中的一个文件夹,其中包含 CR XI 运行时文件。

在 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 在这方面有什么变化?有没有人对此有任何见解?

4

1 回答 1

1

它可能对任何一个都有用

(1) 转到 Tools\Options\Project&Solutions\Build&Run 并将 MSBuild 详细程度更改为“诊断”,然后构建并在“输出”窗口中查看 MSBuild 引用解析逻辑如何为这些程序集工作。也就是说,如果 VS 还没有对底层的 .csproj 文件做一些荒谬的事情

(2) 比较VS2008项目文件和VS2010项目文件中的XML,看看<Reference>节点里有什么

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

于 2010-08-10T20:40:39.173 回答