C#类类型 - 如何确定它是否是标准的.net框架类

时间:2010-05-06 01:42:03

标签: c# reflection gettype

C#/ .net framework

确定类(类型)是否是.net框架提供的类而不是我的任何类或第三方库类的最可靠方法是什么。

我测试了一些方法

  • 命名空间,例如从“系统”开始。
  • 程序集的代码库,其中dll位于

所有这些“感觉”虽然有效,但有点笨拙。

问题:确定这个问题的最简单,最可靠的方法是什么?

4 个答案:

答案 0 :(得分:6)

您可以检查程序集的公钥令牌。 Microsoft(BCL)程序集将具有公钥标记b77a5c561934e089b03f5f7f11d50a3a。 WPF程序集将具有公钥标记31bf3856ad364e35

通常,要获取程序集的公钥标记,可以使用sn.exe -Tp foo.dllsn.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)

你说基类库吗?

您可以在此处查询:http://en.wikipedia.org/wiki/Base_Class_Library