【问题标题】:Getting the Version of my C# app?获取我的 C# 应用程序的版本?
【发布时间】:2022-01-19 08:53:21
【问题描述】:

我正在开发桌面应用程序。我已经创建了一个设置。

例如。我的应用程序。版本是 1.0.0。

我想获取我的桌面应用程序的当前版本,即1.0.0。我尝试过使用Application.ProductVersion,但它提供了我的控件版本。 (我使用的是DevExpress Control15.2.7,所以它提供的当前版本为15.2.7)。

如何获取已安装应用程序的当前版本?我想将它与已安装的版本进行比较,以便为我的产品提供“新版本可用”功能。

【问题讨论】:

  • 取决于您的应用程序是如何实现的。基本上,目前的问题是无法回答的。
  • @Leri 它是由 InstallShield Express Edition 2015 创建的设置。

标签: c# windows version


【解决方案1】:

您要查找的信息在 AssemblyInfo.cs 中。

要在运行时访问其中写入的信息,您可以使用System.Reflection.Assembly。

使用System.Reflection.Assembly.GetExecutingAssembly() 获取程序集(这行代码所在)或使用System.Reflection.Assembly.GetEntryAssembly() 获取您的项目开始使用的程序集(很可能这是您的应用)。

在多项目解决方案中,请牢记这一点!

string version = Assembly.GetExecutingAssembly().GetName().Version.ToString()
// returns 1.0.0.0

对应的AssemblyInfo.cs:

对应的EXE-属性:

This 在使用 InstallShield 时可能很重要(请参阅 cmets)!

【讨论】:

  • 请检查您的 AssemblyInfo.cs。里面写了什么?
  • 如果这没有任何帮助,请尝试使用 GetEntryAssembly 而不是 GetExecutingAssembly
  • 我没有设置程序集信息。我正在使用第 3 方 InstallShield 来创建设置。我已经设置了版本和所有内容,但没有在程序集中设置。我认为InstallShield会管理。无论如何,我已经更改了大会信息。现在工作正常。如果我仍然理解错误,请告诉我。
  • “我认为 InstallShield 会管理” - 这是错误的假设,请参阅 this。
【解决方案2】:
System.Reflection.Assembly executingAssembly = System.Reflection.Assembly.GetExecutingAssembly();
var fieVersionInfo = FileVersionInfo.GetVersionInfo(executingAssembly .Location);
var version = fieVersionInfo.FileVersion;

【讨论】:

  • 它返回“15.2.7.0”,这是我的 DevExpress 组件版本。
  • 执行Assembly .Location 给你什么?您的应用程序 exe 的路径还是其他什么?
  • 这里是所有参数。 (1) 程序集位置:C:\Program Files (x86)\MyApplication\MyApplication.exe。 (2) 文件版本/产品版本:15.2.7.0
【解决方案3】:

获取特定程序集的版本:

private const string AssemblyName = "MyAssembly"; // Name of your assembly

public Version GetVersion()
{
    // Get all the assemblies currently loaded in the application domain.
    Assembly[] assemblies = Thread.GetDomain().GetAssemblies();

    for (int i = 0; i < assemblies.Length; i++)
    {
        if (string.Compare(assemblies[i].GetName().Name, AssemblyName) == 0)
        {
            return assemblies[i].GetName().Version;
        }
    }

    return Assembly.GetExecutingAssembly().GetName().Version; // return current version assembly or return null;
}

【讨论】:

  • 我最初使用Assembly.GetEntryAssembly(),它在 Visual Studio 下调试和独立运行时工作,但是当 XAML 设计器加载时,它会返回当前的 Visual Studio 版本(或某些组件的版本)。此解决方案适用于所有三种情况:D
【解决方案4】:

另一种方法,与公认的答案基本相同,是:

Version appVersion = Assembly.GetExecutingAssembly().GetName().Version;
versionLabel.Text = "v" + appVersion.Major + "." + appVersion.Minor + "." + appVersion.Build + ".";

【讨论】:

    猜你喜欢
    • 2011-09-07
    • 2011-09-27
    • 2011-09-25
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多