我可以这样做
return Assembly.GetEntryAssembly().GetName().Name;
或者
return Path.GetFileNameWithoutExtension(Application.ExecutablePath);
两者都会始终给出所需的应用程序名称吗?如果是这样,哪个是获取应用程序名称的更标准方法?如果它仍然是一个没有胜利的情况,是否有一种方法比另一种更快?或者还有其他正确的方法吗?
我可以这样做
return Assembly.GetEntryAssembly().GetName().Name;
或者
return Path.GetFileNameWithoutExtension(Application.ExecutablePath);
两者都会始终给出所需的应用程序名称吗?如果是这样,哪个是获取应用程序名称的更标准方法?如果它仍然是一个没有胜利的情况,是否有一种方法比另一种更快?或者还有其他正确的方法吗?
根据您考虑的应用程序名称,甚至还有第三种选择:获取程序集标题或产品名称(通常在 中声明AssemblyInfo.cs
):
object[] titleAttributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), true);
if (titleAttributes.Length > 0 && titleAttributes[0] is AssemblyTitleAttribute)
{
string assemblyTitle = (titleAttributes[0] as AssemblyTitleAttribute).Title;
MessageBox.Show(assemblyTitle);
}
或者:
object[] productAttributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), true);
if (productAttributes.Length > 0 && productAttributes[0] is AssemblyProductAttribute)
{
string productName = (productAttributes[0] as AssemblyProductAttribute).Product;
MessageBox.Show(productName);
}
这取决于您如何定义“应用程序名称”。
Application.ExecutablePath
返回启动应用程序的可执行文件的路径,包括可执行文件名称,这意味着如果有人重命名文件,则值会更改。
Assembly.GetEntryAssembly().GetName().Name
返回程序集的简单名称。这通常但不一定是程序集清单文件的文件名,减去其扩展名
因此,GetName().Name 似乎更亲民。
至于更快的,我不知道。我认为 ExecutablePath 比 GetName() 更快,因为在 GetName() 中需要反射,但这应该被测量。
编辑:
尝试构建此控制台应用程序,运行它,然后尝试使用 Windows 文件资源管理器重命名可执行文件名,双击重命名的可执行文件直接再次运行。
ExecutablePath 反映了变化,Assembly 名称还是一样的
using System;
using System.Reflection;
using System.Windows.Forms;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name);
Console.WriteLine(Application.ExecutablePath);
Console.ReadLine();
}
}
}