如何在Windows窗体上显示ClickOnce版本号

dan*_*die 63 .net c# deployment clickonce

我有一个Windows窗体应用程序,部署到两个不同的位置.

  • 内联网 - ClickOnce
  • Internet - 通过Windows安装程序安装在Citrix服务器场中

我为Click-once部署版本显示ClickOnce版本号ApplicationDeployment.IsNetworkDeployed.

if (ApplicationDeployment.IsNetworkDeployed)
        return ApplicationDeployment.CurrentDeployment.CurrentVersion;
Run Code Online (Sandbox Code Playgroud)

但对于非点击应用程序,我不知道如何检索clickonce版本,除非我在汇编信息中硬编码版本号.

是否有自动检索非Clickonce部署版本的ClickOnce版本号?

小智 98

  1. 将程序集引用添加System.Deployment到项目中.

  2. 在类文件中导入名称空间:

    VB.NET:

    Imports System.Deployment
    
    Run Code Online (Sandbox Code Playgroud)

    C#:

    using System.Deployment;
    
    Run Code Online (Sandbox Code Playgroud)
  3. CurrentVersion属性中检索ClickOnce版本.

    您可以从ApplicationDeployment.CurrentDeployment.CurrentVersion酒店获取当前版本.这会返回一个System.Version对象.

    注意(来自MSDN):

    CurrentVersion将不同于UpdatedVersion是否已安装新的更新但尚未调用Restart.如果部署清单配置为执行自动更新,则可以比较这两个值以确定是否应重新启动应用程序.

    注意:CurrentDeployment静态属性仅在使用ClickOnce部署应用程序时有效.因此,在访问此属性之前,应ApplicationDeployment.IsNetworkDeployed首先检查该属性.它总是在调试环境中返回false.

    VB.NET:

    Dim myVersion as Version
    
    If ApplicationDeployment.IsNetworkDeployed Then
       myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion
    End If
    
    Run Code Online (Sandbox Code Playgroud)

    C#:

    Version myVersion;
    
    if (ApplicationDeployment.IsNetworkDeployed)
       myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用Version对象:

    从这里开始,您可以使用标签中的版本信息,例如在"关于"表单中,以这种方式:

    VB.NET:

    versionLabel.Text = String.Concat("ClickOnce published Version: v", myVersion)
    
    Run Code Online (Sandbox Code Playgroud)

    C#:

    versionLabel.Text = string.Concat("ClickOnce published Version: v", myVersion);
    
    Run Code Online (Sandbox Code Playgroud)

    (Version对象被格式化为一个由四部分组成的数字(major.minor.build.revision).)

  • 这不适用于 .NET Core(.NET 5 及更高版本),因为没有 System.Deployment。是否有更新方法来获取不使用 System.Deployment 的 ClickOnce 版本? (2认同)

Jar*_*Par 11

不,我不相信有办法.我相信ClickOnce信息来自清单,该清单仅在ClickOnce部署中可用.我认为硬编码版本号是您的最佳选择.

  • -1因为cpg的答案有用,请查看. (5认同)
  • +1 因为 cpg 的回答只是重申了问题中的“解决方案”(尽管有更多细节)。 (2认同)

Rob*_*Net 8

每次推出新版本时,我都会简单地将主程序集的汇编版本与CLickOnce版本相同.然后当它作为非clickonce应用程序运行时,只需使用Reflection来获取程序集版本.


Nin*_*rry 5

.NET (Core) 7 及更高版本的解决方案

在.net Core上,您可以从环境变量中读取版本号ClickOnce_CurrentVersion

string versionString = Environment.GetEnvironmentVariable("ClickOnce_CurrentVersion") ?? "0.0.0.0";
Version version= Version.Parse(versionString);
MessageBox.Show(version.ToString());
Run Code Online (Sandbox Code Playgroud)

查看文档