Visual studio 2013 使用MSBuild将任何具有WiX的CPU构建部署到x86

Visual studio 2013 使用MSBuild将任何具有WiX的CPU构建部署到x86,visual-studio-2013,tfs,msbuild,wix,Visual Studio 2013,Tfs,Msbuild,Wix,我有一套解决方案,可以构建一个完整的.NET任何CPU应用程序。我有一个WiX项目,它将以x86的形式部署该应用程序,我可以在VisualStudio2013中手动运行它,而不会出现任何问题。现在,我正试图在MSBuild/TFS中实现这一点。冲突在于我需要为代码指定任何CPU,为WiX指定x86。我最初的想法是将WiX解决方案/项目改成任何名义上的CPU,但让它实际生成x86 MSI。但是,wixproj设置不允许使用任何CPU。我认为任何CPU和64位安装程序都会出现同样的问题。WiX似乎决

我有一套解决方案,可以构建一个完整的.NET任何CPU应用程序。我有一个WiX项目,它将以x86的形式部署该应用程序,我可以在VisualStudio2013中手动运行它,而不会出现任何问题。现在,我正试图在MSBuild/TFS中实现这一点。冲突在于我需要为代码指定任何CPU,为WiX指定x86。我最初的想法是将WiX解决方案/项目改成任何名义上的CPU,但让它实际生成x86 MSI。但是,wixproj设置不允许使用任何CPU。我认为任何CPU和64位安装程序都会出现同样的问题。WiX似乎决定不允许任何CPU


我在这里看到的另一个选项是不使用MSBuild构建WiX部件,而是在构建后批处理文件中处理它。不过,似乎您应该能够使用WiX部署任何CPU代码。

只要告诉它构建任何CPU和x86平台,它就会根据需要构建或跳过项目。它应该很好用。您将在生成日志中看到类似“平台无效跳过”的消息,如果不希望这样,只需在每个解决方案中创建缺少的平台,并将项目配置为不为其生成。

您可以创建自定义xaml生成模板,并使用额外的MSBuild步骤在主生成之后生成安装项目。我将此技术用于三个不同的MSBuild构建步骤:

在其他MSBuild步骤中,您可以硬编码解决方案名称,如果您只生成一个产品,这可能是合适的。如果您想要更大的灵活性,可以重新安排生成过程参数,并将其提供给MSBuild步骤。team build process editor将自动选择新的流程参数布局:


有关自定义生成模板的一般指南,请参见。与早期版本相比,TFS build 2013中的构建模板更易于遵循和修改

似乎WiX项目使用平台配置来确定构建的模式,因此它们只允许x86或x64平台配置。因此,不可能在“任何CPU”平台配置中构建WiX项目,因为该平台不存在

以32位(或64位)构建WiX项目最简单的方法是设置一个同时包含.NET项目和WiX项目的解决方案,如下图所示。第一个矩形中的项目是C#项目,第二个矩形中有WiX项目

然后为此解决方案设置一个或多个解决方案配置,其中.NET项目为“任意CPU”,WiX项目为x86(或64位安装程序为x64)。例如:

如果您想同时拥有32位和64位安装程序,那么我建议您进行x86解决方案配置和x64解决方案配置。将.NET项目设置为以“任意CPU”配置或相应位(x86或x64)生成,并将WiX项目设置为以正确位生成(x86用于32位安装程序,x64用于64位安装程序)

请注意,在任何一种情况下,您都需要确保安装程序项目从编译器放置二进制文件的位置拾取二进制文件

然后设置TFS生成定义,以使用您创建的解决方案配置生成此解决方案。如下图所示


然后,TFS将使用正确的解决方案配置构建您的解决方案,这将以各自正确的配置构建您的.NET项目和WiX项目。

谢谢,这是我错过的技巧。这里的关键点是解决方案配置/平台和单个项目平台设置不需要匹配。正如您所说,我将任何CPU版本从MSBuild传递给解决方案,然后解决方案使用自己的值在项目中迭代。在本例中,x86 |部署。在我的场景中,我有一堆解决方案都设置为AnyCPU,现在是WiX的单一解决方案,解决方案配置为AnyCPU | Release,包含项目x86 | Release.FWIW,我不建议将安装程序和应用程序项目放在同一个解决方案中。当dev准备迁移到下一个visualstudio时,我看到了太多的痛苦,但是WiX、InstallShield或其他人还不支持它。在我看来,最好保持它的解耦状态。@ChristopherPainter,这似乎很公平。在工作中,我们只考虑不升级到下一个VS的原因之一,就好像我们不能同时升级每个人,如果其他依赖不可用。一般来说,我们已经为VS的发布等了至少一年,我们可以再等一段时间。将安装程序和应用程序项目放在同一个解决方案中,这意味着开发人员可以快速获得关于他们是否破坏了安装程序的反馈。我还看到了一些关于应用程序与安装程序代码以及谁能触碰什么的政治。这是一个个案,一个非常微妙的讨论。最后的原因。。。。WiX项目通常是最后一个要构建的项目,需要大量明确的项目依赖关系才能确保这一点。错过他们和顺序是错误的,导致一个坏的建设。将WiX放在自己的解决方案中解决了这一问题,并且不会通过每次构建安装程序来降低应用程序的构建速度。是的,这是可行的,但@Petrik给出的答案更清晰。我确实找到了一个旧的解决方案,在我清理的配置中有一些废话。还有一个叫做“混合平台”的平台。这实际上比构建“任何CPU”更干净,然后让它构建一个x86项目平台。我试图解释这个问题,而不是提出一个具体的答案,因为每个人的构建需求都是不同的。就我个人而言,我喜欢在这个场景中创建名为“应用程序”和“安装程序”的平台以及TFS归档清理器