如何阅读程序集属性

在我的程序中,如何读取AssemblyInfo.cs中设置的属性:

[assembly: AssemblyTitle("My Product")] [assembly: AssemblyDescription("...")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Radeldudel inc.")] [assembly: AssemblyProduct("My Product")] [assembly: AssemblyCopyright("Copyright @ me 2008")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] 

我想显示一些这些值给我的程序的用户,所以我想知道如何加载他们从主程序和我使用的Komponent程序集。

这是相当容易的。 你必须使用reflection。 你需要一个Assembly的实例来表示你想读取的属性的程序集。 得到这个简单的方法是做:

 typeof(MyTypeInAssembly).Assembly 

那么你可以做到这一点,例如:

 object[] attributes = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false); AssemblyProductAttribute attribute = null; if (attributes.Length > 0) { attribute = attributes[0] as AssemblyProductAttribute; } 

引用attribute.Product现在将为您提供您传递给AssemblyInfo.cs中的属性的值。 当然,如果您查找的属性可能会多次出现,您可能会得到由GetCustomAttributes返回的数组中的多个实例,但这通常不是您希望检索的那些程序集级别属性的问题。

我已经创build了使用Linq的这个扩展方法:

 public static T GetAssemblyAttribute<T>(this System.Reflection.Assembly ass) where T : Attribute { object[] attributes = ass.GetCustomAttributes(typeof(T), false); if (attributes == null || attributes.Length == 0) return null; return attributes.OfType<T>().SingleOrDefault(); } 

然后你可以像这样方便地使用它:

 var attr = targetAssembly.GetAssemblyAttribute<AssemblyDescriptionAttribute>(); if(attr != null) Console.WriteLine("{0} Assembly Description:{1}", Environment.NewLine, attr.Description); 

好的,也许现在对于原来的问题已经过时了,但是我将会把它作为将来的参考。

如果你想从程序集内自己做,那么使用下面的代码:

 using System.Runtime.InteropServices; using System.Reflection; object[] customAttributes = this.GetType().Assembly.GetCustomAttributes(false); 

然后你可以迭代所有的自定义属性来find你需要的属性

 foreach (object attribute in customAttributes) { string assemblyGuid = string.Empty; if (attribute.GetType() == typeof(GuidAttribute)) { assemblyGuid = ((GuidAttribute) attribute).Value; break; } } 

好吧,我试图通过许多资源来find一个方法来提取Assembly.LoadFrom(path) .dll属性。 但不幸的是,我找不到任何好资源。 这个问题是searchc# get assembly attributes最重要的结果(至less对我来说)所以我想分享我的工作。

我写了下面简单的控制台程序,经过几个小时的奋斗,检索大会的属性。 在这里,我提供了代码,以便任何人都可以使用它进行进一步的参考。

我为此使用CustomAttributes属性。 随意评论这种方法

代码:

 using System; using System.Reflection; namespace MetaGetter { class Program { static void Main(string[] args) { Assembly asembly = Assembly.LoadFrom("Path to assembly"); foreach (CustomAttributeData atributedata in asembly.CustomAttributes) { Console.WriteLine(" Name : {0}",atributedata.AttributeType.Name); foreach (CustomAttributeTypedArgument argumentset in atributedata.ConstructorArguments) { Console.WriteLine(" >> Value : {0} \n" ,argumentset.Value); } } Console.ReadKey(); } } } 

示例输出:

 Name : AssemblyTitleAttribute >> Value : "My Product" 

我使用这个:

 public static string Title { get { return GetCustomAttribute<AssemblyTitleAttribute>(a => a.Title); } } 

以供参考:

 using System; using System.Reflection; using System.Runtime.CompilerServices; namespace Extensions { public static class AssemblyInfo { private static Assembly m_assembly; static AssemblyInfo() { m_assembly = Assembly.GetEntryAssembly(); } public static void Configure(Assembly ass) { m_assembly = ass; } public static T GetCustomAttribute<T>() where T : Attribute { object[] customAttributes = m_assembly.GetCustomAttributes(typeof(T), false); if (customAttributes.Length != 0) { return (T)((object)customAttributes[0]); } return default(T); } public static string GetCustomAttribute<T>(Func<T, string> getProperty) where T : Attribute { T customAttribute = GetCustomAttribute<T>(); if (customAttribute != null) { return getProperty(customAttribute); } return null; } public static int GetCustomAttribute<T>(Func<T, int> getProperty) where T : Attribute { T customAttribute = GetCustomAttribute<T>(); if (customAttribute != null) { return getProperty(customAttribute); } return 0; } public static Version Version { get { return m_assembly.GetName().Version; } } public static string Title { get { return GetCustomAttribute<AssemblyTitleAttribute>( delegate(AssemblyTitleAttribute a) { return a.Title; } ); } } public static string Description { get { return GetCustomAttribute<AssemblyDescriptionAttribute>( delegate(AssemblyDescriptionAttribute a) { return a.Description; } ); } } public static string Product { get { return GetCustomAttribute<AssemblyProductAttribute>( delegate(AssemblyProductAttribute a) { return a.Product; } ); } } public static string Copyright { get { return GetCustomAttribute<AssemblyCopyrightAttribute>( delegate(AssemblyCopyrightAttribute a) { return a.Copyright; } ); } } public static string Company { get { return GetCustomAttribute<AssemblyCompanyAttribute>( delegate(AssemblyCompanyAttribute a) { return a.Company; } ); } } public static string InformationalVersion { get { return GetCustomAttribute<AssemblyInformationalVersionAttribute>( delegate(AssemblyInformationalVersionAttribute a) { return a.InformationalVersion; } ); } } public static int ProductId { get { return GetCustomAttribute<AssemblyProductIdAttribute>( delegate(AssemblyProductIdAttribute a) { return a.ProductId; } ); } } public static string Location { get { return m_assembly.Location; } } } }