如何获得ClickOnce Publish版本以匹配AssemblyInfo.cs文件版本?

时间:2008-09-04 18:54:02

标签: visual-studio clickonce versioning

每次我在ClickOnce中发布应用程序时,我都会让它将修订版号更新一次。有没有办法自动更改AssemblyInfo.cs文件中的版本号(我们所有的错误报告都会查看汇编版本)?

4 个答案:

答案 0 :(得分:31)

我们使用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变更集编号,但您可以使用your own custom taskexisting solution从AssemblyInfo文件中获取版本号。

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

我确信其他continuous integration(CI)解决方案可以同样处理此问题。


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

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

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

答案 1 :(得分:4)

我最近使用一些自定义任务实现了这一点。我发现使用ClickOnce实现此问题的一个问题是所有DLL文件都已更新。这会导致ClickOnce更新在每次更新时下载所有应用程序文件。这绕过了ClickOnce部署的优秀功能,其中仅在更新中重新下载修改的文件。

使用ClickOnce实现类似的功能时需要考虑的事情。

答案 2 :(得分:2)

步骤:

  1. 使用外部递增版本号(如果您使用CruiseControl.NET等持续集成服务器,那么它来自构建标签)。
  2. 使用GlobalVersionInfo.cs(解决方案中所有项目引用的文件链接)保存当前版本,并使用MSBuild Community任务中的AssemblyInfo任务在构建上更新它。
  3. 来自.NET SDK的脚本Mage命令行工具,使用相同的版本更新ClickOnce清单(请参阅-v-mv开关)。
  4. BTW,一个很好的奖励是,每当你通过集成脚本自动发布一个较新的ClickOnce部署版本时,如果你还指定了mage.exe的最小版本(与版本相同),那么每个用户都将自动更新下一个应用程序启动。

答案 3 :(得分:0)

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

然后,在执行“发布”|“发布”构建时,您将更改.csproj文件以运行此位代码。 MSBuild的人们在博客中写了关于如何在某些构建类型中执行自定义操作的内容。检查MSBuild team blog