каков правильный способ получить имя моего приложения winforms?

я мог бы сделать это:

return Assembly.GetEntryAssembly().GetName().Name;

или

return Path.GetFileNameWithoutExtension(Application.ExecutablePath);

оба дадут желаемое имя приложения всегда ?? Если да, то какой более стандартный способ получить имя приложения? Если его по-прежнему не выиграть ситуацию, есть ли что-то вроде одного метода быстрее, чем другой? Или есть другой правильный подход?

спасибо.

3 ответов



В зависимости от того, что вы считаете название программы, есть даже третий вариант: получить название сборки или название продукта (обычно они объявляются в 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().Имя казалось более affidable.

для более быстрого, я не знаю. Я предполагаю, что ExecutablePath быстрее, чем GetName (), потому что в GetName() требуется отражение, но это должно быть измерено.

EDIT:

попробуйте создать это консольное приложение, запустите его, а затем попробуйте переименовать имя исполняемого файла с помощью Проводника 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();
        }
    }
}