Тип класса C# - Как определить, является ли это стандартным классом платформы .NET

C# / платформа .NET

Что является самым надежным способом определить, является ли класс (тип) классом, обеспеченным платформой .NET и не каким-либо из моих классов или сторонних классов библиотеки.

Я протестировал некоторые подходы

  • Пространство имен, например, запускающийся с "Системы".
  • Кодовая база блока, где dll расположен

Все это "чувствует себя" немного неуклюжим, хотя это работает.

Вопрос: Каков самый легкий и самый надежный способ определить это?

5
задан HorstWalter 6 May 2010 в 01:42
поделиться

4 ответа

Считывание атрибута сборочной компании из сборки [сборка: 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
ответ дан 14 December 2019 в 13:29
поделиться

Пара идей:

В Visual Studio в обозревателе решений разверните «Ссылки», щелкните ссылку правой кнопкой мыши, затем выберите «Свойства» и просмотрите путь, например:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ System.dll

Я предполагаю, что большинство сборок в C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ скорее всего будут стандартными .NET.

Кроме того, вы можете найти сборку в библиотеке MSDN, например:
http://msdn.microsoft.com/en-us/library/system.aspx .

0
ответ дан 14 December 2019 в 13:29
поделиться

Вы говорите о библиотеке базовых классов?

Вы можете проконсультироваться здесь: http://en.wikipedia.org/wiki/Base_Class_Library

-2
ответ дан 14 December 2019 в 13:29
поделиться

Вы можете проверить токен открытого ключа сборки. Сборки Microsoft (BCL) будут иметь токен открытого ключа b77a5c561934e089 или b03f5f7f11d50a3a . Сборки WPF будут иметь токен открытого ключа 31bf3856ad364e35 .

Как правило, для получения токена открытого ключа сборки можно использовать sn.exe -Tp foo.dll . sn.exe является частью Windows SDK, которая у вас уже должна быть.

Вы можете получить токен открытого ключа из полного имени сборки (например, typeof (string) .Assembly.FullName ), которое является просто строкой, или вы можете получить байты необработанного токена открытого ключа из сборку, выполнив P / Invoke в StrongNameTokenFromAssembly .

6
ответ дан 14 December 2019 в 13:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: