可以使用MSBuild + .csproj文件创建msi-installer吗?

时间:2014-05-13 12:47:54

标签: c# .net visual-studio deployment msbuild

对于使用Visual Studio Express但没有设置和部署项目模板的人,可以使用 .csproj 文件轻松创建 msi 安装程序?我已经阅读了(现在无法找到链接)MSBuild可以使用 csproj 文件(它被转换为MSBuild项目文件 MSBuild) - 那么对InstallShield,WIX或设置和部署项目的需求是什么?

我意识到这可能是一个简单的问题,但在网上搜索只是解释了为什么需要MSBuild - 而且这些都包含在框架本身中。

3 个答案:

答案 0 :(得分:4)

首先澄清几点:

  • .csproj 是一个MSBuild项目文件,大多数Visual Studio项目文件(包括WiX项目)也是如此。 .sln文件不是MSBuild项目文件,但MSBuild会将其转换为一个。
  • 从最新版本开始,MSBuild不再是.NET Framework的一部分。它现在是MS Build Tools,一个单独的免费产品。
  • 即使使用Visual Studio Express,您也可以充分利用MSBuild。 Express不允许非Microsoft 扩展到Visual Studio 。 WiX工具集确实提供了MSBuild目标/任务文件和Visual Studio扩展。因此,使用Express,您没有WiX项目模板扩展器和编辑器。

Visual Studio的另一种选择是SharpDevelop。它提供了自己的WiX项目模板。

您也可以手动创建WiX项目,如文档中所述。

使用明确的文件列表创建简单的MSI安装程序很容易。您还可以“收获”.csproj输出和一些其他Visual Studio项目输出,以及目录等。

大多数编辑器(包括Visual Studio Express)都会帮助您将WiX项目和源文件编辑为XML。您可能需要告诉它相关的XML Schema文件(.xsd)在哪里获得内容帮助。在这种情况下,WiX的压缩二进制分发可能最简单。

Windows Installer非常复杂。 WiX工具集允许完全访问该复杂性,同时尽量使其保持简单。使用WiX意味着至少要学习一些Windows Installer。

最终,没有任何安装程序工具可以查看您的编程项目,并决定您要发送哪些文件以及放置它们的位置。所以,不,你不能简单地通过引用.csproj来设计和构建MSI。

答案 1 :(得分:1)

我认为WiX将是最好的选择。使用Wix构建安装程序基本上是对 candle.exe 然后 light.exe 的简单调用,因此它可以在 .csproj <内的自定义MSBuild目标中自动执行/ strong>没有任何问题。

但是,需要设置 .wixproj 项目通常执行的环境。例如,您需要找到WixSDK以使用蜡烛/灯光二进制文件并将$(OutputPath)属性传递给candle.exe,以便输出文件可以在 .wxs 中使用。

毕竟,会有一个这样的目标启动安装程序构建:

<Target Name="AfterBuild" Condition="'$(Configuration)' == 'Release'">
    <Exec Command="$(candleExecutable) product.wxs" />
    <Exec Command="$(lightExecutable) product.wixobj" />
</Target>

您还可以向此目标添加条件,以便仅在特定配置上调用它。

答案 2 :(得分:0)

不,我不相信Express有任何办法可以做到这一点。它不是内置功能,您不能在Express中使用加载项。