1

ClickOnce 应用程序的发布会自动增加构建/版本号。此版本号与项目属性中的程序集版本不同(后者又会自动显示在生成的 WPF 关于框中)。

有没有办法在程序集属性中同步 ClickOnce 版本号和项目号?目标是为两个地方获得一个自动增加且相同的版本号。

ClickOnce / Publish 的版本号

项目属性

4

1 回答 1

1

没有自动(内置)方法可以做到这一点。我在项目中使用的一种可能的解决方法是使用自定义 msbuild 任务生成发布和程序集版本信息。

一些作为 nuget 包可用的项目旨在解决这些问题,但那里没有什么非常完整的。看看SemVerHarvesterCroMagVersion ...

以上两种都有很多问题:

  1. SemVerHarvester 绑定到 git/hg 并从 git 标签获取版本信息
  2. 它实际上并没有自己编写 AssemblyInfo.cs 文件,而是依赖于 Msbuild Community Tasks
  3. AssemblyInfo.cs 文件始终被“触及”,这意味着每次重建都是完全重建而不是增量重建。CroMagVersion 部分解决了这个问题——它在发布版本中定义了一个#define,并且只有当这个定义存在时才会重新生成一个 AssemblyInfo.cs ......
  4. 两个项目都没有直接设置 ClickOnce 系统用于发布的 ApplicationVersion/ApplicationRevision 属性

我已经为上述所有方法提供了解决方法,我打算很快在 github 上开源......同时我将描述我所做的事情:

我做了一个自定义的 msbuild 任务,它从 git 读取版本信息,然后根据这些信息创建一个内存中的 AssemblyInfo 文件。我检查现有的 AssemblyInfo.cs 文件(即具有 AssemblyVersion 和其他属性的文件),当且仅当内存中的版本较新时才覆盖它。这允许增量重建。最后,我还输出了 ApplicationVersion、ApplicationRevision 和其他属性以支持 ClickOnce。

如果我将我的解决方法开源作为一个独立的解决方案,我可能会允许从文本文件、git、hg 等中获取版本信息

我仍然没有找到好的解决方案的问题:

ClickOnce 不直接支持多个发布渠道——比如 debug/beta/custom_feature/whatever,这让我想知道我是否应该放弃 clickonce 并改用Shimmer

于 2012-12-09T11:01:43.777 回答