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

时间:2016-08-27 18:34:10

标签: c# version

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

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

然而,似乎并不总是抓住我期待的版本。我真的不明白这是完全有效的还是它在做什么。

我认为它是传授因为我从另一个程序启动我的程序然后它似乎抓住启动它的程序的版本,或者'GetExecutingAssembly()'我假设引用执行我的程序程序,像这样:

System.Diagnostics.Process.Start(my_programs_path);

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

甚至可能在没有留下某种痕迹的情况下启动我的程序,就好像用户自己刚启动它一样。

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您可以通过应用中定义的Assembly使用已知类型的typeof属性,以确保您获得正确的'汇编然后检索它的版本,例如

typeof(YourKnownType).Assembly.GetName().Version.ToString();

答案 1 :(得分:2)

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

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

考虑以下示例:

在AssemblyA中:

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
  }
}

在AssemblyB中:

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

答案 2 :(得分:0)

非常感谢您提供的信息。我终于选择了

Assembly.GetExecutingAssembly().GetName().Version.ToString()

我的解决方案。