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

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

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

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

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

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

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

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

  • 在我的网络应用程序中,情况变得更糟:当我从以下位置选择 CR XI 运行时程序集时 Library 文件夹,再次,VS2010 似乎自动检测到 GAC 中存在类似的文件(名称相同,但版本不同)并使用这些文件 - 现在我的网络应用程序不再工作了......

VS 2010 到底是怎么回事?为什么它不能保留我的选择并让我从 Library 文件夹而不是坚持去 GAC?VS 2008 和 VS 2010 在这方面有什么变化?有人对此有任何见解吗?

有帮助吗?

解决方案

它可能对任何一个有用

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top