C# / платформа .NET
Что является самым надежным способом определить, является ли класс (тип) классом, обеспеченным платформой .NET и не каким-либо из моих классов или сторонних классов библиотеки.
Я протестировал некоторые подходы
Все это "чувствует себя" немного неуклюжим, хотя это работает.
Вопрос: Каков самый легкий и самый надежный способ определить это?
Считывание атрибута сборочной компании из сборки [сборка: 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);
}
}
}
}
Пара идей:
В 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 .
Вы говорите о библиотеке базовых классов?
Вы можете проконсультироваться здесь: http://en.wikipedia.org/wiki/Base_Class_Library
Вы можете проверить токен открытого ключа сборки. Сборки Microsoft (BCL) будут иметь токен открытого ключа b77a5c561934e089
или b03f5f7f11d50a3a
. Сборки WPF будут иметь токен открытого ключа 31bf3856ad364e35
.
Как правило, для получения токена открытого ключа сборки можно использовать sn.exe
-Tp foo.dll
. sn.exe
является частью Windows SDK, которая у вас уже должна быть.
Вы можете получить токен открытого ключа из полного имени сборки (например, typeof (string) .Assembly.FullName
), которое является просто строкой, или вы можете получить байты необработанного токена открытого ключа из сборку, выполнив P / Invoke в StrongNameTokenFromAssembly .