我一直在使用这段代码来获取我的程序版本:
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/