检索程序集属性





5.00/5 (1投票)
一个辅助类,用于轻松检索程序集属性。
引言
AssemblyAttributes
是一个可爱的辅助类,对于几乎每个显示自身信息的 .NET/Silverlight 应用程序(例如“关于”对话框)都非常有用。它以一种简单且一致的方式检索以下程序集属性
标题
产品
Copyright
Company
描述
商标
配置
版本
文件版本
信息版本
对于经验丰富的开发人员来说,这样做轻而易举,但手动获取这些信息 100 次会非常繁琐。而且,初级开发人员有时难以使用反射来获取这些属性。借助泛型和 Lambda 表达式,您可以编写一个优雅的类来一次性解决此问题。
Using the Code
创建 AssemblyAttributes
类的一个实例并查询其属性
AssemblyAttributes assembly = new AssemblyAttributes();
Console.WriteLine("Title: " + assembly.Title);
Console.WriteLine("Product: " + assembly.Product);
Console.WriteLine("Version: " + assembly.Version);
您可以像这样向构造函数传递一个显式程序集
var assembly = new AssemblyAttributes(Assembly.GetEntryAssembly());
关注点
由于泛型和 lambda,每个属性的实现都非常优雅
public string Title
{
get { return GetValue<AssemblyTitleAttribute>(a => a.Title); }
}
这个类的真正核心是 GetValue
方法。它从程序集中获取泛型自定义属性。如果存在,它将返回该属性上的 getValue
委托的结果。如果属性不存在,则返回空字符串。
string GetValue<T>(Func<T, string> getValue) where T : Attribute
{
T a = (T)Attribute.GetCustomAttribute(_assembly, typeof(T));
return a == null ? "" : getValue(a);
}
请注意 Version
属性实现中的解决方法,这对于 Silverlight 3 是必需的,因为 GetName()
方法被标记为 security_critical
,不能由用户代码调用。
public string Version
{
get
{
#if !SILVERLIGHT
return _assembly.GetName().Version.ToString();
#else
return _assembly.FullName.Split(',')[1].Split('=')[1];
#endif
}
}