当前位置:首页> 正文

关于Visual Studio:如何获取ClickOnce Publish版本以匹配AssemblyInfo.cs文件版本?

关于Visual Studio:如何获取ClickOnce Publish版本以匹配AssemblyInfo.cs文件版本?

How do I get the ClickOnce Publish version to match the AssemblyInfo.cs File version?

每次我在ClickO中发布应用程序时,都会得到一次将修订号更新1的信息。有没有一种方法可以自动进行此更改以更改AssemblyInfo.cs文件中的版本号(我们所有的错误报告都将其查看为Assembly Version)?


我们使用Team Foundation Server Team Build,并且已将一个块添加到TFSBuild.proj的AfterCompile目标中,以触发我们的首选版本号为ClickOnce的发布:

1
2
3
4
5
<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发布版本:

1
2
3
4
5
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

我最近使用一些自定义任务实现了这一点。我发现使用ClickOnce实施此操作时遇到的问题是,所有DLL文件都已更新。这将导致ClickOnce更新在每次更新时下载所有应用程序文件。这绕过了ClickOnce部署的出色功能,在这些功能中,只有经过修改的文件才在更新中重新下载。

使用ClickOnce实现类似的事情时,只需考虑一下。


步骤:

  • 使用外部递增版本号(如果您使用诸如CruiseControl.NET之类的持续集成服务器,则它来自构建标签)。
  • 使用GlobalVersionInfo.cs(解决方案中所有项目引用的文件链接)来保存当前版本,并使用MSBuild Community任务中的AssemblyInfo任务在构建中对其进行更新。
  • .NET SDK中的脚本管理器命令行工具,使用相同的版本来更新ClickOnce清单(请参见-v-mv开关)。
  • 顺便说一句,一个不错的好处是,每当您通过集成脚本自动发布较新的ClickOnce部署版本时,如果您还为mage.exe指定了最低版本(与版本相同),则每个用户都将自动更新下次启动应用程序。


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

    然后,您将更改.csproj文件,以在执行"发布|发布"构建时运行此代码。 MSBuild的人已经在博客上发表了关于如何在某些构建类型期间执行自定义操作的博文。请查看MSBuild团队博客。


    展开全文阅读

    相关内容