c#如何获取当前可执行文件.exe的版本

标签 c# version

我一直在使用这段代码来获取我的程序版本:

public string progVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

但是,它似乎并不总能获得我期望的版本。我真的不明白这完全是如何工作的或者它在做什么。

我认为这是传递,因为我从另一个程序启动我的程序,然后它似乎获取了启动它的程序的版本,或者我假设引用了执行我的程序的“GetExecutingAssembly()”程序,像这样:

System.Diagnostics.Process.Start(my_programs_path);

有没有更可靠的方法来获取我要求时实际程序的程序版本?

甚至可以在不留下任何痕迹的情况下启动我的程序,就好像用户自己刚刚启动了它一样。

感谢您的帮助!

最佳答案

GetExecutingAssembly() 返回包含调用它的方法的程序集。如果您从库中调用它,您将始终获得库的版本,而不是应用程序可执行文件。

要获取应用程序的可执行文件,请使用 GetEntryAssembly()

考虑以下示例:

在程序集 A 中:

class VersionTest
{
  void Test()
  {
    Console.Write("Executing assembly: {0}\n", Assembly.GetExecutingAssembly().GetName().ToString()); // returns AssemblyA
    Console.Write("Entry assembly: {0}\n", Assembly.GetEntryAssembly().GetName().ToString());         // returns AssemblyB
  }
}

在程序集 B 中:

class Program
{
   void Main()
   {
      var ver = new VersionTest();
      ver.Test();
   }
}

关于c#如何获取当前可执行文件.exe的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184474/

相关文章:

c# - 使用嵌套的elasticsearch自动完成映射

java - 当我没有在 Maven 的 pom.xml 中指定它时,版本会是什么?

svn - 探索新的版本控制系统。我最大的需要: Reliable merging

c++ - 如何使用不同版本的 mingw 构建的静态库?

java - 如何识别不同Java版本的maven Artifact ?

c# - 在 Winforms 控件中显示 XML 数据

c# - Rally SOAP API - 导入 .net 项目后缺少 RallyServiceService 类

c# - 隔离存储异常 : Unable to create the store directory

c# - 如果数据库中插入新记录,如何更新 SharePoint Online 列表?

java - @version 标签是否应该表示该源文件所属的工件的版本,或者该文件上次更改时的版本?