【问题标题】:How do I get the ClickOnce Publish version to match the AssemblyInfo.cs File version?如何获得 ClickOnce 发布版本以匹配 AssemblyInfo.cs 文件版本?
【发布时间】:2008-09-04 18:54:01
【问题描述】:

每次我在ClickOnce 中发布应用程序时,我都会得到它来更新修订号。有没有办法自动获取此更改以更改 AssemblyInfo.cs 文件中的版本号(我们所有的错误报告都查看 Assembly Version)?

【问题讨论】:

    标签: visual-studio clickonce versioning


    【解决方案1】:

    我们使用 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);
    }
    

    【讨论】:

      【解决方案2】:

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

      只是在使用 ClickOnce 实现类似的东西时要考虑的事情。

      【讨论】:

        【解决方案3】:

        步骤:

        1. 使用外部递增版本号(如果您使用像 CruiseControl.NET 这样的持续集成服务器,那么它来自构建标签)。
        2. 使用 GlobalVersionInfo.cs(您的解决方案中的所有项目引用的文件链接)来保存当前版本,并使用来自 MSBuild Community 任务的 AssemblyInfo 任务在构建中更新它。
        3. .NET SDK 中的脚本Mage 命令行工具使用相同版本更新 ClickOnce 清单(请参阅-v-mv 开关)。

        顺便说一句,一个不错的好处是,每当您通过集成脚本自动发布较新的 ClickOnce 部署版本时,如果您还为 mage.exe 指定最低版本(与版本相同),那么每个用户都将自动更新下一个应用程序启动。

        【讨论】:

          【解决方案4】:

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

          然后,您需要更改 .csproj 文件以在执行 Publish|Release 构建时运行这段代码。 MSBuild 人员在博客中介绍了如何在某些构建类型期间执行自定义操作;检查MSBuild team blog

          【讨论】:

            猜你喜欢
            • 2017-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-30
            • 1970-01-01
            相关资源
            最近更新 更多