点击一次-自动生成所需的所有构建

本文关键字:自动生成 构建 一次 | 更新日期: 2023-09-27 18:06:47

是否有一个脚本总是使所有已发布的构建都需要更新?无论如何,我都想对所有客户强制更新,但是,即使在使用ClickOnce部署API之后,也会询问他们是否想要更新。

点击一次-自动生成所需的所有构建

您可以通过在项目的.csproj文件中添加以下<target>标记来实现。

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    // Other Tags ...
    <Target Name="AutoSetMinimumRequiredVersion" BeforeTargets="GenerateDeploymentManifest">
        <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
            <Output PropertyName="MinimumRequiredVersion" TaskParameter="OutputVersion" />
        </FormatVersion>
        <FormatVersion Version="$(ApplicationVersion)" Revision="$(ApplicationRevision)">
            <Output PropertyName="_DeploymentBuiltMinimumRequiredVersion" TaskParameter="OutputVersion" />
        </FormatVersion>
    </Target>
    // Other Tags ...
</Project>

它会自动使你的每次发布/更新是强制性的,而不需要做任何额外的事情。

是的,您可以通过要求最小版本来强制所有客户升级。这样您就可以进行不兼容的服务器更改。

从MSDN:

要将更新标记为必需的,请单击"指定最低要求"应用程序更新"对话框中此应用程序的版本,然后指定发布版本(主要,次要,构建,修订),哪个可以指定应用程序的最低版本号被安装。

我最终使用ClickOnce部署API,在那里我对过程有更多的控制。诀窍是将应用程序设置为100%脱机运行的CD-ROM应用程序。然后,使用简单的ClickOnce代码,可以执行静默更新。

    private void Update()
    {
        try
        {
            ApplicationDeployment.CurrentDeployment.CheckForUpdateCompleted += new CheckForUpdateCompletedEventHandler(CurrentDeployment_CheckForUpdateCompleted);
            ApplicationDeployment.CurrentDeployment.UpdateCompleted += new System.ComponentModel.AsyncCompletedEventHandler(CurrentDeployment_UpdateCompleted);
            ApplicationDeployment.CurrentDeployment.CheckForUpdateAsync();
        }
        catch (Exception)
        {
        }
    }
    void CurrentDeployment_CheckForUpdateCompleted(object sender, CheckForUpdateCompletedEventArgs e)
    {
        try
        {
            if (e.UpdateAvailable)
            {
                ApplicationDeployment.CurrentDeployment.UpdateAsync();
            }
        }
        catch (InvalidOperationException)
        {
        }
    }
    void CurrentDeployment_UpdateCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
    {
        //TODO: update completion code here
    }