如何使ClickOnce发布版本与AssemblyInfo.cs文件版本匹配?

31
每次我在ClickOnce中发布应用程序时,我都可以使其自动更新修订号。是否有一种方法可以自动更改AssemblyInfo.cs文件中的版本号(我们所有的错误报告都查看程序集版本)?
4个回答

33
我们使用Team Foundation Server Team Build,并在TFSBuild.proj的AfterCompile目标中添加了一个区块,以使用我们的首选版本号触发ClickOnce发布:
<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />
PublishApplicationVersion变量由自定义MSBuild任务生成,用于使用TFS更改集编号,但您可以使用自己的自定义任务现有解决方案从AssemblyInfo文件获取版本号。

尽管您在项目文件中理论上可以这样做(它只是一个MSBuild脚本),但我建议不要从开发人员机器部署。

我相信其他持续集成(CI)解决方案也可以类似地处理此问题。


编辑:抱歉,我把你的问题搞反了。从ClickOnce版本号到AssemblyInfo文件应该是可行的。我确信MSBuild社区任务(上面的链接)有一个任务用于更新AssemblyInfo文件,因此您只需要一个自定义任务来从ClickOnce配置XML中提取版本号。

但是,您还可以考虑更改错误报告以包括ClickOnce发布版本:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

5
我最近使用一些自定义任务来实现这个。在使用ClickOnce实现时,我发现一个问题是所有的DLL文件都会被更新。这会导致ClickOnce更新每次都要下载所有应用程序文件。这就绕过了ClickOnce部署的一个很好的特性,即在更新中只重新下载修改过的文件。当你使用ClickOnce实现类似功能时,要考虑这一点。

2
步骤:
  1. 使用外部增量版本号(如果您利用像CruiseControl.NET这样的持续集成服务器,则来自构建标签)。
  2. 使用GlobalVersionInfo.cs(文件链接引用解决方案中的所有项目)来保存当前版本,并使用MSBuild Community任务中的AssemblyInfo任务在构建时更新它。
  3. 从.NET SDK脚本Mage命令行工具以使用相同的版本更新ClickOnce清单(请参见-v-mv开关)。
顺便说一下,一个不错的奖励是,每当您通过集成脚本自动发布新的ClickOnce部署版本时,如果还指定了mage.exe的最小版本(与版本相同),则每个用户将在下次应用程序启动时自动更新。

0

你可能需要创建一段代码,根据.csproj文件中存储的版本号更新AssemblyInfo.cs。(ClickOnce部署版本存储在XML标记内。)

然后,当执行发布|发布版本构建时,你需要更改.csproj文件以运行此代码片段。MSBuild团队已经在博客中介绍了如何在某些构建类型期间执行自定义操作;请查看MSBuild team blog


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