Как правильно получить имя моего приложения winforms? - PullRequest
8 голосов
/ 03 марта 2012

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

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

или

return Path.GetFileNameWithoutExtension(Application.ExecutablePath);

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

Спасибо.

Ответы [ 3 ]

11 голосов
/ 03 марта 2012
4 голосов
/ 03 марта 2012

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

Зависит от того, как вы определяете «имя приложения».

Application.ExecutablePath возвращает путь к исполняемому файлу, который запустил приложение, включая имя исполняемого файла, это означает, что если кто-то переименует файл, значение изменится.

Assembly.GetEntryAssembly().GetName().Name возвращает простое имя сборки. Обычно это, но не обязательно, имя файла манифеста сборки, за вычетом его расширения

Итак, имя GetName (). Name кажется более примитивным.

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

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();
        }
    }
}
...