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

Eri*_*ric 6 c# version

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

public string progVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
Run Code Online (Sandbox Code Playgroud)

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

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

System.Diagnostics.Process.Start(my_programs_path);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢你的帮助!

P. *_*kis 6

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

获取应用程序的可执行文件使用 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
  }
}
Run Code Online (Sandbox Code Playgroud)

在装配 B 中:

class Program
{
   void Main()
   {
      var ver = new VersionTest();
      ver.Test();
   }
}
Run Code Online (Sandbox Code Playgroud)