Атрибут 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;