質問
Serializable
などのオブジェクトで使用される一般的な属性のリストはありますか?
ありがとう
編集〜私が尋ねた理由は、ntiers ORMSでStoredProcedure属性に遭遇したことです。
解決
はい、msdnをご覧ください。こちら。
編集:このリンクは答えが悪いだけです。名前に属性を持つすべてのロード可能なタイプ(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(<*>quot;Found {assemblyList.Count} assemblies");
var currentItem = 1;
foreach (var gacAssemblyInfo in assemblyList)
{
Console.SetCursorPosition(0, 2);
Console.WriteLine(<*>quot;On {currentItem} of {assemblyList.Count} ");
Console.SetCursorPosition(0, 3);
Console.WriteLine(<*>quot;Loading {gacAssemblyInfo}");
currentItem++;
try
{
var asm = Assembly.Load(gacAssemblyInfo);
foreach (Type t in asm.GetTypes())
{
if (t.Name.EndsWith("Attribute", StringComparison.OrdinalIgnoreCase))
{
collectedRecords.Add(<*>quot;{t.FullName} - {t.Assembly.FullName}");
}
}
}
catch (Exception ex)
{
failedToLoad.Add(<*>quot;FAILED to load {gacAssemblyInfo} - {ex}");
Console.SetCursorPosition(1, 9);
Console.WriteLine(<*>quot;Failure to load count: {failedToLoad.Count}");
Console.SetCursorPosition(4, 10);
Console.WriteLine(<*>quot;Last Fail: {gacAssemblyInfo}");
}
}
var fileBase = System.IO.Path.GetRandomFileName();
var goodFile = <*>quot;{fileBase}_good.txt";
var failFile = <*>quot;{fileBase}_failedToLoad.txt";
System.IO.File.WriteAllLines(goodFile, collectedRecords);
System.IO.File.WriteAllLines(failFile, failedToLoad);
Console.SetCursorPosition(0, 15);
Console.WriteLine(<*>quot;Matching types: {goodFile}");
Console.WriteLine(<*>quot;Failures: {failFile}");
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
}
}
}
他のヒント
さらに、独自の属性を作成できます。他の人のコードを検索している場合、他人のコードを作成するときに混乱するのは簡単です。
ここにリストがありますが、完全ではありません。 200以上の属性があります。
属性の完全なリストは知りませんが、MSDNで属性を検索すると興味深い結果が得られます。私は、興味深い属性タイプの名前空間を参照する傾向があり、それらを調べて、どのような用途に使用できるかを調べました。最も効率的なアプローチではありません。
システムのMSDNエントリ。属性の下部にはリストがあります。
カスタム属性を見ている可能性があるため、探しているものが見つからない場合があります。
http://www.code-magazine.com/Article.aspx ?quickid = 0307041
Reflectorを使用して mscorlib
アセンブリを参照し、 System.Attribute
で派生型を展開します>ノード。現在Reflectorにロードされているすべてのアセンブリのすべての属性が表示されます。
所属していません StackOverflow