如何在Azure DevOps Pipelines中正确构建MSI安装程序项目?

10
过去几天里我一直在苦苦思索如何设置CI/CD流程来构建一个简单的WPF解决方案并使用Azure DevOps Pipelines创建MSI安装文件("artifact")。我尝试使用Build VS Installer来完成这个任务。我的主要问题是我不知道我做错了什么或者漏掉了哪些步骤,而且我无法在任何地方找到清晰明确的说明。
以下是我尝试过的方法:
1. 使用托管2017代理池和基本的.NET桌面模板。问题:
- 从VS Installer项目中创建.msi文件作为最后一个任务或在发布artifact之前):
2018-11-28T22:57:56.3186071Z DEBUG: 聚合: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.com 2018-11-28T22:57:56.3211382Z 现在运行(C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.com),参数为("D:\a\1\s" / Build "release|any cpu" /Out "D:\a\1\b\BuildInstaller_Log_20181128225756.txt") 2018-11-28T22:58:54.0015320Z DevEnv进程运行完毕。成功=True。 2018-11-28T22:58:54.1169279Z ##[warning]未找到.MSI文件,请检查您的构建配置。如果这是预期的,您可以考虑使用默认的Visual Studio Build任务代替这个自定义Installer任务。2018-11-28T22:58:54.1434410Z ##[section] 结束:从VS Installer项目创建.msi文件

enter image description here

  1. 根据文档,创建自己的构建代理。我在该服务器上安装了Visual Studio Community 2017和VS Installer Projects扩展程序。我按照相关答案中的步骤执行。结果:

2018-11-29T17:46:03.9813075Z 调试:聚合:System.Object []\devenv.com 2018-11-29T17:46:04.4346060Z ##[error]无法检索cmdlet的动态参数。指定的通配符字符模式无效:System.Object [] 2018-11-29T17:46:04.4716416Z ##[section] 结束:从VS Installer项目创建.msi文件

enter image description here

我也尝试了使用Marketplace上的DevEnv Build而不是DutchWorkz的版本,但仍然无法得到.msi文件。请有人向我展示实现这个简单目标的明确步骤吗?


1
如果我没记错,托管代理没有安装此功能的VS扩展。这就是为什么必须设置一个私有代理。另外,您不能通过命令行触发MSI的生成吗?您尝试从PowerShell手动启动该命令了吗? - Rob Bos
@RobBos 谢谢您的建议。这也是我了解到的有关托管代理的情况,这就是为什么我尝试设置自己的代理并确保在该机器上安装了VS扩展程序。但仍然无法使其正常工作。如果我知道如何做,那听起来像是一个很好的解决方案。如果您可以向我展示如何做到这一点,我将非常乐意接受它作为答案。我的最终目标是输出.msi文件,无论使用哪种方法(越简单越好):) - Cosmin
1
要执行命令行任务,请添加“批处理脚本”任务,“值”值应为“C:\ Windows \ System32 \ cmd.exe”,并且参数“值”应为:“msi编译命令放在这里!” - Antebios
@Atebios 这听起来可能是可行的。我尝试了一下,但没有成功。错误 MSB4025:无法加载项目文件。根级别上的数据无效。不确定是否使用了正确的参数。你有什么建议吗?谢谢。 - Cosmin
有没有办法使用 "DutchWorkz" 在发布模式下构建MSI? - Dharti Sutariya
2个回答

4
我能够找出为什么会得到下面特定错误信息,并想要分享一下,以便帮助未来遇到类似问题的人。

DEBUG:

聚合: System.Object[]\devenv.com [error]无法检索 cmdlet 的动态参数。指定的通配符字符模式无效:System.Object[]

问题在于我在私有构建服务器上安装了两个版本的 Visual Studio 2017(专业版和企业版)。一旦我删除其中一个,一切都正常工作。不确定是否有方法可以同时安装两个版本,但我不需要两个版本。


非常感谢您的回复。我在该服务器上只安装了VS2017 Community和SSDT作为单独的实例。您认为这可能是问题的根源吗?我不明白为什么它不能与Community版本一起使用。如果我错了,请纠正我。 - Cosmin
1
我只是在猜测,但我认为安装SSDT不会成为问题。如果您可以获得VS2017专业版或企业版的安装程序,我建议您安装它并卸载Community版本。再次猜测,也许Build VS Installer扩展与Community版本不兼容。不幸的是,他们的文档没有提供很多信息。不要忘记,除了Build VS Installer扩展之外,在安装新版本的Visual Studio 2017时,您还需要安装您在原帖中提到的VS Installer项目扩展。 - Migs

1

微软Visual Studio安装程序项目扩展现在已经包含在windows-latest运行器中。此处查找更多信息。

简而言之,使用带有windows-latest vmimage的代理,并通过devenv.exe进行构建,而不是MSBuild。


请参考以下程序相关内容的翻译:有关更多详细信息,请访问 https://dev59.com/EbHma4cB1Zd3GeqPQcSc#68646694 - andrew.fox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接