WPF中的Application.ProductName等价物?

我有一个类库,在主GUI应用程序下嵌套两个+层,在该嵌套类库中我希望能够访问主应用程序名称。

在.Net 3.5下,您可以调用Application.ProductName来从Assembly.cs文件中检索值,但是我无法识别WPF中的等效项。 如果我使用reflection和GetExecutingAssembly然后它返回类库详细信息?

谢谢

您可以使用Assembly.GetEntryAssembly()来获取EXE程序集,然后可以使用Reflection从中获取AssemblyProductAttribute。

这假设已在EXE程序集上设置了产品名称。 WinForms Application.ProductName属性实际上在包含主窗体的程序集中查找,因此即使GUI是在DLL中构建的,它也可以工作。 要在WPF中复制它,您将使用Application.Current.MainWindow.GetType().Assembly (并再次使用Reflection来获取属性)。

这是我用来获取产品名称的另一个解决方案

 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 

如果您需要像我一样获得描述性产品名称,那么此解决方案可能很有用:

  // 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; } } 

它返回你在AssemblyInfo.cs文件中为’AssemblyProduct’属性设置的任何内容,例如“Widget Engine Professional”。

在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; 

基于上面的答案,这立即起作用:

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

你需要的答案是:

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

如果您正在寻找assembly信息提供的值,例如标题……

在此处输入图像描述

…然后你必须得到这样的自定义属性:

 using System.Linq; using System.Reflection; using System.Windows; namespace WpfApp1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Title = (Assembly.GetEntryAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute)).SingleOrDefault() as AssemblyTitleAttribute)?.Title; } } } 

在此处输入图像描述