C#/ .net framework
确定类(类型)是否是.net框架提供的类而不是我的任何类或第三方库类的最可靠方法是什么。
我测试了一些方法
所有这些“感觉”虽然有效,但有点笨拙。
问题:确定这个问题的最简单,最可靠的方法是什么?
答案 0 :(得分:6)
您可以检查程序集的公钥令牌。 Microsoft(BCL)程序集将具有公钥标记b77a5c561934e089
或b03f5f7f11d50a3a
。 WPF程序集将具有公钥标记31bf3856ad364e35
。
通常,要获取程序集的公钥标记,可以使用sn.exe
-Tp foo.dll
。 sn.exe
是Windows SDK的一部分,您应该已经拥有它。
您可以从程序集的全名(例如typeof(string).Assembly.FullName
)获取公钥标记,这只是一个字符串,或者您可以通过执行P / Invoke从程序集中获取原始公钥标记字节StrongNameTokenFromAssembly
答案 1 :(得分:2)
从装配体中读取装配公司属性 [assembly:AssemblyCompany(“Microsoft Corporation”)]
http://msdn.microsoft.com/en-us/library/y1375e30.aspx
using System;
using System.Reflection;
[assembly: AssemblyTitle("CustAttrs1CS")]
[assembly: AssemblyDescription("GetCustomAttributes() Demo")]
[assembly: AssemblyCompany("Microsoft")]
namespace CustAttrs1CS {
class DemoClass {
static void Main(string[] args) {
Type clsType = typeof(DemoClass);
// Get the Assembly type to access its metadata.
Assembly assy = clsType.Assembly;
// Iterate through the attributes for the assembly.
foreach(Attribute attr in Attribute.GetCustomAttributes(assy)) {
// Check for the AssemblyTitle attribute.
if (attr.GetType() == typeof(AssemblyTitleAttribute))
Console.WriteLine("Assembly title is \"{0}\".",
((AssemblyTitleAttribute)attr).Title);
// Check for the AssemblyDescription attribute.
else if (attr.GetType() ==
typeof(AssemblyDescriptionAttribute))
Console.WriteLine("Assembly description is \"{0}\".",
((AssemblyDescriptionAttribute)attr).Description);
// Check for the AssemblyCompany attribute.
else if (attr.GetType() == typeof(AssemblyCompanyAttribute))
Console.WriteLine("Assembly company is {0}.",
((AssemblyCompanyAttribute)attr).Company);
}
}
}
}
答案 2 :(得分:0)
一些想法:
在Visual Studio中,在“解决方案资源管理器”中,展开“引用”,右键单击引用,然后选择“属性”并查看路径,例如:
C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \ System.dll中
我猜测C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \中的大多数程序集都可能是标准.NET。
此外,您可以在MSDN库中查找程序集,例如:
http://msdn.microsoft.com/en-us/library/system.aspx
答案 3 :(得分:-2)
你说基类库吗?