2011-03-11 94 views
1

我正在进行一些自动构建更改,并且有关于构建/打包EXE应用程序的最佳方法的一些问题。用于msbuild EXE项目的构建和部署自动化

从概念上讲,有两个脚本。第一个构建所有内容将产生的二进制文件放在一个共享上,以便它们可用于部署。第二组脚本每个负责从该构建结果复制和配置一些应用程序。

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

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

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

+0

开始的这条线“这对于EXE是有问题的......”目前还不清楚,我不确定你在做什么,你能改述吗?另外,你使用的是什么类型的构建脚本,如果是MSBuild或其他方法,将会有不同的方法。 – 2011-03-12 03:22:14

+2

而问题是? – 2011-03-14 20:52:00

回答

0

摘要

由于维克斯#实际编制MSI当你“运行”它创建,并使用WiX的工具包中的.exe文件,你将需要输出的可执行维克斯#+ WiX的工具包创建到Drop文件夹。然后确保WiX工具包可执行文件在您的PATH或您的输出文件夹中,并且创建Powershell脚本以在drop文件夹中调用您的Wix#可执行文件。一种简单的方法是为每个单独的“产品安装程序”安装一个Wix#项目,并将每个Wix#可执行文件输出到您的drop文件夹,以便通过下游Powershell(或其他)进一步处理/生成MSI文件。脚本。

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

例如用于Visual Studio解决方案的单一维克斯#项目

因此,举例来说,如果你的维克斯#项目代码文件是建立在VS的一份名为MyWebsiteSetup项目和维克斯#代码文件是MyWebsiteSetup.cs,Wix#可执行文件将位于\ MyWebsiteSetup \ bin \ debug \ MyWebsiteSetup.exe。

已经建立将这个MyWebSiteSetup.exe文件放在drop文件夹中,以及其他文件Wix#放置在bin \ debug文件夹中。然后让第二组脚本运行MyWebsiteSetup.exe程序,该程序将生成MSI。我相信您可能需要将Wix#代码所需的安装组件文件以及预期的文件夹结构部署到drop文件夹中。 Wix#似乎将所需的所有其他支持文件放在bin \ debug文件夹中,因此只需将Wix#项目的bin \ debug中的所有文件复制到drop文件夹即可获得所需内容。

适应多种产品(多维克斯#项目)

现在的例子中,你的问题是如何为多个网站,所有的文件都放在同一个文件夹下降做到这一点。有几种方法可以解决这个问题,但我建议在Visual Studio中为每个单独的产品分别提供一个Wix#项目,并为每个部署到drop文件夹的项目提供Wix#输出文件以及产品文件。如果您的独立产品被命名为MyWebSiteSetupA,MyWebSiteSetupB和MyWebSiteSetupC,则它们将生成可执行文件MyWebSiteSetupA.exe,MyWebSiteSetupB.exe和MyWebSiteSetupC.exe。你可以简单地让你的第二组脚本依次调用每一个脚本。这些项目的每个Wix#代码文件(.cs文件)当然都会被编码,以便知道它运行时需要提取哪些文件,以及运行结果的exe文件时,它将获取它所需的文件,前提是您可以在预期的时间内使用它们,并为每个产品的安装程序构建单个MSI。

当然,还有很多其他的方法,像PowerShell这样的灵活工具,每种方法都有优点和缺点,但我希望这可以帮助您开始使用一种方法,然后根据需要量身定制方法。