Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用MSBuild+;创建msi安装程序。csproj文件?_C#_.net_Visual Studio_Deployment_Msbuild - Fatal编程技术网

C# 是否可以使用MSBuild+;创建msi安装程序。csproj文件?

C# 是否可以使用MSBuild+;创建msi安装程序。csproj文件?,c#,.net,visual-studio,deployment,msbuild,C#,.net,Visual Studio,Deployment,Msbuild,对于没有安装和部署项目模板的使用Visual Studio Express的用户,是否可以使用.csproj文件轻松创建msi安装程序?我已经读到(现在找不到链接)MSBuild可以使用csproj文件(它被MSBuild转换为MSBuild项目文件)-那么InstallShield、WIX或安装和部署项目需要什么呢 我意识到这可能是一个简单的问题,但搜索web只会找到为什么需要MSBuild的解释——这已经包含在框架本身中了。不,我认为Express没有任何方法可以做到这一点。它不是内置功能,

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


我意识到这可能是一个简单的问题,但搜索web只会找到为什么需要MSBuild的解释——这已经包含在框架本身中了。

不,我认为Express没有任何方法可以做到这一点。它不是内置功能,您不能在Express中使用外接程序。

我认为WiX将是这里的最佳选择。使用Wix构建安装程序基本上是对candle.exe和light.exe的简单调用,这样就可以在.csproj中的自定义MSBuild目标中自动执行安装程序,而不会出现任何问题

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

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

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


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

首先进行一些澄清:

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

您还可以手动从头开始创建WiX项目,如文档中所述

创建一个简单的MSI安装程序很容易,其中包含明确的文件列表。您还可以“harvest”.csproj输出和一些其他VisualStudio项目输出,以及目录等

大多数编辑器(包括VisualStudioExpress)都将帮助您以XML格式编辑WiX项目和源文件。您可能需要告诉它相关的XML模式文件(.xsd)在哪里才能获得内容帮助。WiX的压缩二进制发行版可能是在这种情况下使用的最简单的发行版

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


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

您使用的是哪个版本的Visual Studio?从VS2012开始,不支持安装和部署项目。此外,CSPROJ文件是MSBUILD项目,与MSI不同。@JohnSaunders谢谢。但正如我所说,我使用的是从未安装过项目的Express版本。我知道csproj文件不是msi。我的问题是-MSBuild(使用csproj文件,或者实际上以任何方式)可以创建msi吗。我正在尝试将我的exe文件设置为“已安装”,以便任何用户帐户都可以访问它(与clickonce相反)。不,我不相信Express有任何方法可以做到这一点。它不是内置功能,您不能将外接程序与Express一起使用。@JohnSaunders,谢谢。基于MSI的安装程序包含更多元数据,用于指定应如何安装某个对象,而MSBuild脚本不是为此而设计的。安装技术的目标是填补空白。