大约一年前,一个类似的问题被问及并得到了回答,但要么是一个不同的问题(一切都处于测试阶段)或被误诊。它位于:MSbuild task fails because "Any CPU" solution is built out of order。为什么Tfs2010在其他任何东西之前构建我的Wix项目?
我的问题是我有一个wix安装程序项目,并且在星期一升级到Tfs2010后,生成链接失败,因为它无法在项目中找到Wpf应用程序的生成产品。经过一番挖掘,这是因为它还没有建成。 Vs2010中的建筑正常工作。 wix项目设置为依赖于Wpf项目,并且在IDE中查看Project Build Order时,一切看起来都很正常。
该问题最初是在解决方案中只有两个平台定义时遇到的; x86和x64。也有两种风格,Debug和Release,并且TFSBuild.proj被设置为构建所有四种组合。任何地方都没有AnyCPU出现。根据上面提到的问题,我尝试将Wpf项目更改为使用AnyCPU,以便首先构建它。此时,wix项目使用了确切的配置,而Wpf项目使用AnyCPU的风格。但是,这样做似乎没有改变任何事情。
我正在使用Tfs2010 RTM,Vs2010 RTM和最新版本的Wix,它们在撰写本文时是从2010-04-02开始的3.5.1602.0。任何其他人遇到这个?
2010-04-27:相当程度的挖掘,并再现克隆VM构建机器上后,我相信我知道发生了什么事情,也什么是失败,但我不太知道如何解决它。
情况是,该错误似乎表现出基于解决方案文件中纯粹绘制运气的项目排序的症状。看起来好像解决方案文件只是盲目地按照它们出现的顺序构建项目,依赖于它能够检测未构建的引用并在需要时按需构建它们。
在我特别的解决方案文件中,我的Wix项目是在我的Wpf应用程序项目之前订购的。这导致Wix项目首先被构建,并且正确地检测到对Wpf项目的依赖关系,但实际的MSBuild任务因为未定义的$(BuildProjectReferences)变量而被忽略,我提到了这篇文章主要文章中的一些评论线。由于MSBuild的详细程度仍然在诊断之中,所以BuildProjectReferences可以看作是未定义的构建Wix项目,并且在构建Wix项目的任务中构建Wpf项目时可以将其定义为true。然而,在测试时,它会再次评估未定义的任务,并且Wix构建失败,因为它无法找到未构建的Wpf项目的构建输出。
因此,底线:因为$(BuildProjectReferences)变量不正确而跳过了项目依赖关系。有趣的是,这个变量只存在于Wix2010.targets文件中,而不存在于wix.targets中;我想这就是为什么在安装Tfs2010和Vs2010后才显示出来。
解决方案:如何确保BuildProjectReferences正确传递到后续的MSBuild任务?有什么特别的变量范围正在进行?
2010-09-14:在WiX工具集中出现此问题的一个错误:http://sourceforge.net/tracker/?func=detail&atid=642714&aid=2990231&group_id=105970并在前一段时间修复。希望这不再是一个问题。如果是这样,请打开一个新的错误。
为了直接解决您的评论,我的解决方案中没有任何内容在其构建文件中具有AnyCPU配置。我创建了AnyCPU配置,仅用于测试我的原始帖子中链接到的线程建议的解决方案。在它不起作用后,我再次删除了AnyCPU配置。
此外,项目位于相同的解决方案文件中,但在单独的解决方案文件夹(接口文件夹,安装程序文件夹)中(如果有的话)。有趣的是,我打算制作一个小型沙盒示例,以便我可以说明我遇到的问题,但是在创建我的小样本解决方案后,我无法获取重现的错误。这让我想,也许这是使用从Tfs2008团队项目升级的团队项目而不是在Tfs2010中创建的团队项目的结果。如果我无法弄清楚测试解决方案的工作原理,我可以尝试将我的项目分支到一个新项目中来测试这个理论。
p.s.另外,我是新来的stackoverflow - 如果“回答你自己的问题”工作流只是为了提供具体的答案,为什么地球上的评论长度有限?
所以我把构建冗长达到诊断和今天通读一遍,尤其是一线站出来对我说:
Task "MSBuild" skipped, due to false condition; ('@(_ProjectReferenceWithConfiguration)'!='' and '$(BuildingInsideVisualStudio)' != 'true' and '$(BuildProjectReferences)' == 'true' and '@(_MSBuildProjectReferenceExistent)' != '') was evaluated as ('..\WpfApp\WpfApp.csproj'!='' and '' != 'true' and '' == 'true' and '..\WpfApp\WpfApp.csproj' != '').
这被看作是我的安装项目试图建立我的wpf项目,因为wpf项目被引用。特别是,出于某种原因,$(BuildProjectReferences)正在评估为'',当我确信它应该是'真实的'。
在日志中但是前面,在MSBuild任务的WpfApp项目开始时,我看到了这一点:
Task "MSBuild" (TaskId:15)
...
Initial Properties:
...
BuildProjectReferences = true
所以财产确实是正确的,直到任务的开始,但随后被显然被覆盖?我不清楚这些属性是如何设置的。
我遇到了同样的问题,但仍未能解决它。 – 2010-04-21 13:56:05
我已经做了一些研究。从头开始重新创建解决方案似乎可行,我认为这可能与订单项目添加到解决方案中有关。这是纯粹的猜测,虽然... – 2010-04-21 14:56:47
编辑原始问题描述与更多信息。 – bwerks 2010-04-27 19:35:10