2008-10-07 4 views
11

Есть ли список где-то на общих атрибутах, которые используются в таких объектах, как Serializable?Список атрибутов .NET

Благодаря

Редактировать ~ Поэтому я спросил, что я наткнулся атрибут StoredProcedure в ntiers ORMS.

ответ

11

Да, посмотрите, что у msdn вы были закрыты, пожалуйста, посмотрите here.

РЕДАКТИРОВАТЬ: Эта ссылка только ответ всасывается. Вот рабочий экстрактор для всех загружаемых типов (gac), которые имеют атрибут в имени.

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.Reflection; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var process = new Process(); 
      //your path may vary 
      process.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe"; 
      process.StartInfo.RedirectStandardOutput = true; 
      process.StartInfo.UseShellExecute = false; 
      process.StartInfo.Arguments = "/l"; 
      process.Start(); 

      var consoleOutput = process.StandardOutput; 


      var assemblyList = new List<string>(); 
      var startAdding = false; 
      while (consoleOutput.EndOfStream == false) 
      { 
       var line = consoleOutput.ReadLine(); 
       if (line.IndexOf("The Global Assembly Cache contains the following assemblies", StringComparison.OrdinalIgnoreCase) >= 0) 
       { 
        startAdding = true; 
        continue; 
       } 

       if (startAdding == false) 
       { 
        continue; 
       } 

       //add any other filter conditions (framework version, etc) 
       if (line.IndexOf("System.", StringComparison.OrdinalIgnoreCase) < 0) 
       { 
        continue; 
       } 

       assemblyList.Add(line.Trim()); 
      } 

      var collectedRecords = new List<string>(); 
      var failedToLoad = new List<string>(); 

      Console.WriteLine($"Found {assemblyList.Count} assemblies"); 
      var currentItem = 1; 


      foreach (var gacAssemblyInfo in assemblyList) 
      { 
       Console.SetCursorPosition(0, 2); 
       Console.WriteLine($"On {currentItem} of {assemblyList.Count} "); 
       Console.SetCursorPosition(0, 3); 
       Console.WriteLine($"Loading {gacAssemblyInfo}"); 
       currentItem++; 

       try 
       { 
        var asm = Assembly.Load(gacAssemblyInfo); 

        foreach (Type t in asm.GetTypes()) 
        { 
         if (t.Name.EndsWith("Attribute", StringComparison.OrdinalIgnoreCase)) 
         { 
          collectedRecords.Add($"{t.FullName} - {t.Assembly.FullName}"); 
         } 
        } 

       } 
       catch (Exception ex) 
       { 
        failedToLoad.Add($"FAILED to load {gacAssemblyInfo} - {ex}"); 
        Console.SetCursorPosition(1, 9); 
        Console.WriteLine($"Failure to load count: {failedToLoad.Count}"); 
        Console.SetCursorPosition(4, 10); 
        Console.WriteLine($"Last Fail: {gacAssemblyInfo}"); 
       } 
      } 

      var fileBase = System.IO.Path.GetRandomFileName(); 
      var goodFile = $"{fileBase}_good.txt"; 
      var failFile = $"{fileBase}_failedToLoad.txt"; 
      System.IO.File.WriteAllLines(goodFile, collectedRecords); 
      System.IO.File.WriteAllLines(failFile, failedToLoad); 
      Console.SetCursorPosition(0, 15); 
      Console.WriteLine($"Matching types: {goodFile}"); 
      Console.WriteLine($"Failures: {failFile}"); 
      Console.WriteLine("Press ENTER to exit"); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

Все, что я видел, это «Атрибуты, которые используются в таких объектах?» - Сообщение было лишено его сериализуемого атрибута. Я, хотя он спрашивал о nullables (? И ??) – StingyJack 2008-10-07 17:28:10

+0

удалил комментарии и обновленный ответ, чтобы иметь точную информацию, как только недоразумение было устранено – 2008-10-07 17:28:32

2

Я не знаю полного списка атрибутов, но поиск атрибута в MSDN может дать интересные результаты. Я имел тенденцию просматривать пространства имен для интересных типов атрибутов, а затем искать их, чтобы посмотреть, для чего я могу их использовать. Я знаю, не самый эффективный подход.

Запись MSDN для System.Attribute имеет список внизу.

3

Кроме того, вы можете создавать свои собственные атрибуты. Если вы ищете чужой код, легко смутить, когда они создадут свои собственные.

1

Вы можете использовать отражатель для просмотра mscorlib сборки, и под System.Attribute, разверните Производные типы узел. Он отобразит все атрибуты для всех сборок, загруженных в Reflector.