Как правильно получить имя моего приложения winforms?
Я мог бы сделать это:
return Assembly.GetEntryAssembly().GetName().Name;
или же
return Path.GetFileNameWithoutExtension(Application.ExecutablePath);
Оба дадут желаемое название приложения всегда?? Если да, то какой более стандартный способ получения имени приложения? Если ситуация все еще беспроигрышная, то есть ли один метод быстрее другого? Или есть ли другой правильный подход?
Благодарю.
3 ответа
Посмотрите на Application.ProductName и Application.ProductVersion
В зависимости от того, что вы называете именем приложения, есть даже третий вариант: получить название сборки или название продукта (они обычно объявляются в 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 () требуется Reflection, но это следует измерить.
РЕДАКТИРОВАТЬ:
Попробуйте создать это консольное приложение, запустите его, а затем попробуйте переименовать имя исполняемого файла с помощью проводника Windows, запустите снова напрямую, дважды щелкнув по переименованному исполняемому файлу.
ExecutablePath отражает изменение, имя сборки остается тем же
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();
}
}
}