2008-10-07 4 views
11

Existe-t-il une liste quelque part sur les attributs communs utilisés dans des objets tels que Serializable?Liste d'attributs .NET

Merci

Modifier ~ La raison pour laquelle j'ai demandé est que je suis tombé sur un attribut StoredProcedure dans ntiers ORMES.

Répondre

11

Oui, regardez msdn vous avez couvert s'il vous plaît regarder here.

EDIT: Ce lien seulement réponse sucer. Voici un extracteur de travail pour tous les types chargeables (gac) qui ont un attribut dans le nom.

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

Tout ce que j'ai vu était "Attributs qui sont utilisés dans des objets comme?" - Le poste avait été dépouillé de son attribut sérialisable. Je pensais qu'il était question de nullables (? Et ??) – StingyJack

+0

commentaires supprimés et la réponse mise à jour pour avoir des informations précises une fois que l'incompréhension a été éclairci –

2

Here is a list, mais ce n'est pas complet. Il y a plus de 200 attributs.

+0

Je suis tombé dessus plus tôt. Je me demandais s'il y avait une liste complète. –

2

Je ne connais pas la liste complète des attributs, mais une recherche de l'attribut dans MSDN peut donner des résultats intéressants. J'ai eu tendance à parcourir les espaces de noms pour trouver des types d'attributs intéressants, puis à les consulter pour voir à quoi je pourrais les utiliser. Pas l'approche la plus efficace, je sais.

L'entrée MSDN pour System.Attribute a une liste en bas.

3

De plus, vous pouvez créer vos propres attributs. Si vous recherchez dans le code de quelqu'un d'autre, il est facile d'être confus lorsqu'ils créent le leur.

1

Vous pouvez utiliser réflecteur pour parcourir l'ensemble mscorlib, et sous System.Attribute, développez les Types dérivés noeud. Il montrera tous les attributs pour tous les assemblys actuellement chargés dans Reflector.

Questions connexes