Continuous integration msbuild EXE项目的生成和部署自动化

Continuous integration msbuild EXE项目的生成和部署自动化,continuous-integration,psake,wixsharp,Continuous Integration,Psake,Wixsharp,我正在进行一些自动构建更改,并对构建/打包EXE应用程序的最佳方法提出了一些问题 从概念上讲,有两个脚本。第一种方法在构建所有内容时,将生成的二进制文件放在一个共享上,以便可以进行部署。第二组脚本分别负责从构建结果复制和配置某些应用程序 构建整个解决方案的第一个脚本通过重写msbuild输出路径将构建结果复制到已知的拾取位置。这会导致所有的二进制文件都被放在同一个文件夹中(web应用程序除外,其中每个项目都位于其自己的网站上的_PublishedWebsites下)。这是有问题的,因为当我为单个

我正在进行一些自动构建更改,并对构建/打包EXE应用程序的最佳方法提出了一些问题

从概念上讲,有两个脚本。第一种方法在构建所有内容时,将生成的二进制文件放在一个共享上,以便可以进行部署。第二组脚本分别负责从构建结果复制和配置某些应用程序

构建整个解决方案的第一个脚本通过重写msbuild输出路径将构建结果复制到已知的拾取位置。这会导致所有的二进制文件都被放在同一个文件夹中(web应用程序除外,其中每个项目都位于其自己的网站上的_PublishedWebsites下)。这是有问题的,因为当我为单个EXE项目构建安装程序时,我只想包含EXE和该EXE的依赖项。但是,由于所有项目输出都在同一文件夹中,因此不清楚各个应用程序需要哪些输出

鉴于构建已将所有可执行文件的二进制文件放在一个文件夹中,如何构建仅包含特定EXE所需二进制文件的MSI

我将psake/powershell用于构建脚本,使用msbuild编译解决方案文件。我正在使用WixSharp从命令行应用程序(而不是CSC)构建安装程序

总结

由于Wix#实际上是在“运行”它创建的.exe并使用Wix工具箱时构建MSI的,因此需要将Wix#+Wix工具箱创建的可执行文件输出到drop文件夹。然后确保WiX toolkit可执行文件位于路径或输出文件夹中,并在drop文件夹中创建调用WiX可执行文件的Powershell脚本。一种简单的方法是为每个单独的“产品安装程序”设置一个Wix项目,并将每个Wix可执行文件输出到drop文件夹中,以便通过下游Powershell(或其他)脚本进一步处理/生成MSI文件

我使用的是集成到VS2013 IDE中的Wix,因此我的答案应该在该上下文中进行解释。我的Wix安装程序只是整个解决方案中几个项目中的一个

VISUAL STUDIO解决方案中单个Wix项目的示例

因此,例如,如果您的Wix项目代码文件在VS中设置为名为MyWebsiteSetup的项目,并且Wix代码文件为MyWebsiteSetup.cs,那么您的Wix可执行文件将位于\MyWebsiteSetup\bin\debug\MyWebsiteSetup.exe

让构建程序将此MyWebSiteSetup.exe文件与其他文件一起放置在drop文件夹中,并将其放置在bin\debug文件夹中。然后让第二组脚本运行MyWebsiteSetup.exe程序,该程序将生成MSI。我相信您可能需要将Wix#代码所需的安装组件文件也部署到drop文件夹中,并部署到预期的文件夹结构中。Wix#似乎将它需要的所有其他支持文件都放在bin\debug文件夹中,因此只要将所有文件从Wix#项目的bin\debug复制到drop文件夹中,就可以满足您的需要

使示例适应多个产品(多个Wix项目)

现在,您的问题是如何对多个网站执行此操作,其中所有文件都放在同一个放置文件夹中。有几种方法可以实现这一点,但我建议的一种方法是在Visual Studio中为每个单独的产品创建一个单独的Wix项目,并将每个项目的Wix输出文件与产品文件一起部署到drop文件夹中。如果单独的产品名为MyWebSiteSetupA、MyWebSiteSetupB和MyWebSiteSetupC,则它们将生成可执行文件MyWebSiteSetupA.exe、MyWebSiteSetupB.exe和MyWebSiteSetupC.exe。您只需让第二组脚本依次调用其中的每一个脚本。当然,这些项目的每个Wix#代码文件(.cs文件)都经过编码,以知道在运行时需要拾取哪些文件,当运行生成的exe时,它将获取所需的文件,前提是您已在预期的位置提供这些文件,并为每个产品的安装程序构建单独的MSI

当然,还有很多其他方法可以实现这一点,使用灵活的工具,如PowerShell,每种方法都有优点和缺点,但我希望这有助于您开始使用一种方法,然后您可以根据自己的需要进行定制。

开头的一行“这对于EXE来说是有问题的…”不清楚,我不确定您的意思是什么,您可以重新措辞吗?另外,您使用的是哪种类型的构建脚本,如果是MSBuild或其他类型,则会有不同的方法。