使用 MSBuild 将使用 WiX 的任何 CPU 构建部署到 x86

Deploy Any CPU build with WiX to x86 using MSBuild

我有一套构建完整 .NET Any CPU 应用程序的解决方案。我有一个 WiX 项目,它将将该应用程序部署为 x86,我可以 运行 在 Visual Studio 2013 年手动完成这一切,没有任何问题。现在我正试图让它在 MSBuild/TFS 中工作。冲突是我需要为代码指定 Any CPU,为 WiX 指定 x86。我最初的想法是将 WiX 解决方案/项目改成 Any CPU 的名称,但让它实际上成为一个 x86 MSI。但是,wixproj 设置不允许使用 Any CPU。我希望 Any CPU 和 64 位安装程序也有同样的问题。 WiX 似乎决心不允许 Any CPU.

我在这里看到的其余选项是不使用 MSBuild 构建 WiX 部分,而是在 post 构建批处理文件中处理它。然而,看起来您应该能够使用 WiX 部署任何 CPU 代码。

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

您可以创建一个自定义 xaml 构建模板,其中包含一个额外的 MSBuild 步骤,以便在主构建之后构建您的设置项目。我将此技术与三个不同的 MSBuild 构建步骤一起使用:

在额外的 MSBuild 步骤中,您可以对解决方案名称进行硬编码,如果您只构建一个产品,这可能是合适的。如果您想要更大的灵活性,您可以重新安排构建过程参数并将它们提供给 MSBuild 步骤。团队构建过程编辑器将自动选择新的过程参数布局:

有关自定义构建模板的一般指南,请参阅 https://msdn.microsoft.com/en-us/library/dd647551.aspx。与早期版本相比,TFS Build 2013 中的构建模板更易于遵循和修改。

似乎 WiX 项目使用平台配置来确定他们正在构建的模式,因此他们只允许 x86 或 x64 平台配置。因此无法在 'Any CPU' 平台配置中构建 WiX 项目,因为该平台不存在。

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

然后为此解决方案设置一个或多个解决方案配置,其中 .NET 项目为 'Any CPU',WiX 项目为 x86(或 64 位安装程序的 x64)。例如像这样:

如果您想同时拥有 32 位和 64 位安装程序,那么我建议您进行 x86 解决方案配置和 x64 解决方案配置。将您的 .NET 项目设置为在 'Any CPU' 配置或各自的位数(x86 或 x64)中构建,并将 WiX 项目设置为以正确的位数构建(32 位安装程序为 x86,64 位安装程序为 x64 -位安装程序)。

请注意,无论哪种情况,您都需要确保安装程序项目从编译器放置二进制文件的位置选择二进制文件。

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

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