Атрибут Application.ProductName в WPF?

У меня есть библиотека классов, вложенная двумя + уровнями в основное приложение GUI, внутри этой библиотеки вложенных классов я хочу иметь доступ к имени основных приложений.

В .Net 3.5 вы можете вызвать Application.ProductName для извлечения значения из файла Assembly.cs, но я не могу идентифицировать эквивалент в WPF. Если я использую отражение и GetExecutingAssembly, тогда он возвращает детали библиотек классов?

Спасибо

Ответы

Ответ 1

Вы можете использовать Assembly.GetEntryAssembly() для получения сборки EXE и затем использовать Reflection для получения атрибута AssemblyProductAttribute.

Это предполагает, что имя продукта было установлено на сборке EXE. Свойство WinForms Application.ProductName действительно выглядело в сборке, содержащей основную форму, поэтому оно работает, даже если графический интерфейс встроен в DLL. Чтобы воспроизвести это в WPF, вы должны использовать Application.Current.MainWindow.GetType().Assembly (и снова использовать Reflection для получения атрибута).

Ответ 2

Вот еще одно решение, которое я использую для получения имени продукта

Public Shared Function ProductName() As String
    If Windows.Application.ResourceAssembly Is Nothing Then 
        Return Nothing
    End If

    Return Windows.Application.ResourceAssembly.GetName().Name
End Sub

Ответ 3

Если вам нужно получить описательное имя продукта, как я, то это решение может быть полезно:

 // Get the Product Name from the Assembly information
 string productName = String.Empty;
 var list = Application.Current.MainWindow.GetType().Assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), true);
 if (list != null)
 {
   if (list.Length > 0)
   {
     productName = (list[0] as AssemblyProductAttribute).Product;
   }
 }

Он возвращает все, что вы установили для атрибута AssemblyProduct в файле AssemblyInfo.cs, например. что-то вроде "Widget Engine Professional".

Ответ 4

в wpf есть много способов сделать это, здесь вы можете найти два из них.

using System;`
using System.Windows;
String applicationName = String.Empty;

//one way
applicationName = AppDomain.CurrentDomain.FriendlyName.Split('.')[0];

 //other way
applicationName = Application.ResourceAssembly.GetName().Name;

Ответ 5

Требуемый ответ:

Path.GetFileName(Assembly.GetEntryAssembly().GetName().Name)

Ответ 6

Основываясь на вышеприведенных ответах, это сразу же замечательно:

var productName = Assembly.GetEntryAssembly()
    .GetCustomAttributes(typeof(AssemblyProductAttribute))
    .OfType<AssemblyProductAttribute>()
    .FirstOrDefault().Product;