Visual Studio 2010 - 选择影响批量生成输出的解决方案配置

时间:2012-05-30 22:00:38

标签: c# visual-studio-2010 visual-studio

摘要

我在Visual Studio 2010中有一种非常奇怪的行为,我不确定它是否是一个错误,或者是否有一些扭曲的逻辑来解释它为什么会以这种方式运行。

执行摘要是当我使用Batch Build-> Select All-> Rebuild为我的所有项目构建所有配置时,VS2010会根据当前选择的解决方案配置生成不同的输出二进制文件。这真的很烦人,因为某些项目输出无法正常运行(提示" [项目名称]已停止工作"启动时出现错误对话框)取决于批处理构建期间选择的解决方案配置

更多细节

我有一个包含3个C#项目的解决方案(1.dll输出项目,由其他2个.exe输出项目引用)。在.exe输出项目中,项目A 具有ReleaseDebug项目配置。 项目B 具有DebugRelease-x86Release-x64配置,因为它需要运行一些不同的后期构建脚本才能为其提供正确版本的第三方库。

我有4个解决方案配置:DebugReleaseRelease-x86Release-x64Release-x86-x64设置为仅构建项目B. ReleaseDebug构建项目A和共享dll项目。

如果我从当前配置下拉框中选择Debug解决方案配置,并且批量生成全部,那么当我尝试运行项目A的发布配置时,它无法运行。如果我从下拉列表中选择任何其他解决方案配置,然后选择Batch Build all,则它会成功运行。当我对生成的.exe文件进行区分时,我可以看到这两种情况不同。

问题

这是VS2010的一些已知的预期行为吗?如果是这样,有人可以提示为什么这个问题可能发生以及我如何解决它?这是VS2010中的错误吗?

后续线索? [编辑]

这是否与VS2010如何处理"项目参考"?有关?正如我所提到的,两个.exe项目都引用了dll Project,称之为 Project D 。我通过选择Add Reference - >添加了引用(比如项目A)。项目 - >项目D.但是,当然,项目A的不同配置想要使用项目D的不同配置版本。当我检查项目A - >在属性下的项目D引用,我看到一个不可编辑的路径字段。根据选择的解决方案配置,我会看到...\Project D\bin\Release\Project D.dll``...\Project D\bin\Debug\Project D.dll,而我看不出有任何方法可以控制这一点,所以我猜VS2010正在努力选择详细信息项目配置。但更奇怪的是,如果我选择Batch Build - >全选 - >清除以删除所有已编译的文件,当我检查它们时,这些参考路径会更改为...\obj\...而不是...\bin\...,而我似乎无法将其更改回来,除非删除并重新添加项目参考。

后续2 [Edit2]

我早些时候撒了谎,我实际上有2个.dll项目(项目D和E,比方说),其中D通过项目参考引用E.

我非常确定VS2010中项目引用的内容破碎或奇怪是罪魁祸首,并认为我找到了所选解决方案配置依赖行为的根本原因,并执行了以下步骤

1)I Batch Build - >全选 - >清理,删除所有以前编译的二进制文件。

2)我从下拉列表中选择了一个Debug Solution Configuration。

3)I Batch Build - >选择仅项目发布 - >重建。

通过观察输出窗口,我看到VS2010知道项目A依赖于D,而D依赖于E,因此它尝试以相反的顺序构建它们。它成功构建了项目E的Release配置。但是它尝试并且无法构建项目D的Release配置,因为它抱怨错过了缺少 Debug 版本的E dll文件。同样由于没有D的Debug版本,A无法构建。

因此,选择解决方案配置似乎会覆盖Project to Project引用中引用项目的配置。

应该是这样吗???

1 个答案:

答案 0 :(得分:1)

进一步搜索之后,我发现这是VS2010中的已知错误,被Microsoft标记为“Wont Fix”。 VS2010中的批量生成很简单。如果你认为这和我一样愚蠢,那就继续向他们表达自己。

https://connect.microsoft.com/VisualStudio/feedback/details/556158/batch-build-links-to-wrong-referenced-projects