使用TeamCity发布ClickOnce应用程序

11

如何让我的Visual Studio 2015解决方案同时发布ClickOnce应用程序?在构建时是否可以更改ClickOnce设置参数,例如更新URL?

2个回答

22

结果证明这很容易:

  • 构建步骤是“MSBuild”
  • 构建文件指向Visual Studio解决方案
  • 将“目标”设置为“发布”
  • 添加“命令行参数”: /property:PublishDir="C:\\Users\TeamCity\\Desktop\\publish\\" <= 其中ClickOnce工件被放置

我还添加了另一个命令行参数/property:InstallUrl="http://my.domain/app/",这样我就可以为不同的构建(测试/生产)设置不同的安装位置。

然后我在我的*.csproj文件中添加了对此参数的引用:

<InstallUrl Condition="'$(InstallUrl)' == ''">http://default.domain/app/</InstallUrl>
<InstallUrl Condition="'$(InstallUrl)' != ''">$(InstallUrl)</InstallUrl>

为了让您的 ClickOnce 应用程序版本与 TeamCity 构建号同步,您可能还需要在 *.csproj 中添加以下内容:

<ApplicationVersion Condition="'$(build_number)' == ''">1.0.0.2</ApplicationVersion>
<ApplicationVersion Condition="'$(build_number)' != ''">$(build_number)</ApplicationVersion>
<BuildNumber Condition="'$(build_number)' == ''">1.0.0.2</BuildNumber>
<BuildNumber Condition="'$(build_number)' != ''">$(build_number)</BuildNumber>

将版本号格式设置为"1.0.0.%build.counter%" (构建配置 > 通用设置)。对于您的应用程序,手动增加主/次版本号。

接下来,我创建了3个构建步骤,针对开发、测试和生产环境分别使用上述三种不同的版本。这样,我的ClickOnce应用程序将从我的开发、测试和生产网站进行安装和自动更新(我将这3个构建版本添加到代码仓库中)。

我还向TeamCity构建配置中添加了“AssemblyInfo patcher”功能,并将“system.Configuration”参数设置为“Release”。


谢谢,这非常有用。您如何更改用于签署ClickOnce的证书? - Borik

2

Dave的回答非常有帮助(谢谢Dave!)。鉴于这是一个与TeamCity - ClickOnce有关的问题,我想添加一些截图(TeamCity v2017.2)

  1. 我创建了两个配置(dev,prod),其中一个在每次提交时触发,另一个是手动触发(prod)。

dev and prod

  1. 我创建了一个单独的构建步骤,其中目标:Clean,Build,Publish
  2. 两个构建配置都将使用配置Release

Build Step

  1. 两个配置之间不同的地方在于参数设置。我希望devprod将ClickOnce文件发布到不同的文件夹中,这可以通过设置system.PublishDir来指定。
  2. 我还希望devprod可以从不同的URL访问,这可以通过使用system.InstallUrl来实现
  3. 请确保在终止PublishDirInstallUrl时使用/,否则您将获得404下载错误或目录路径错误。

Build Parameters 7. 最后,请确保将您的Configuration WinForms项目设置为构建(这让我困扰了一段时间),否则TeamCity将不会生成ClickOnce文件。

Release set to build


三年后:确保在TeamCity构建目标中包含“发布”-否则ClickOnce进程将无法执行!例如,目标:重建,发布。 - Geovani Martinez

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