したがって、リフレクションを使用してC#のカスタム属性からデータにアクセスしようとしていますが、これは次のとおりです。
属性クラス:
[System.AttributeUsage(AttributeTargets.Class | AttributeTargets.Assembly)]
public class Table : System.Attribute
{
public string Name { get; set; }
public Table (string name)
{
this.Name = name;
}
}
私は次のような別のアセンブリを持っています:
[Table("Data")]
public class Data
{
public int PrimaryKey { get; set; }
public string BankName { get; set; }
public enum BankType { City, State, Federal };
}
メイン プログラムでは、現在のディレクトリ内のすべてのファイルを列挙し、すべての dll ファイルをフィルター処理します。実行するdllファイルを取得したら:
var asm = Assembly.LoadFile(file);
var asmTypes = asm.GetTypes();
ここから、Assembly メソッドを使用して Table 属性を読み込んでみます。GetCustomAtteribute(Type t, bool inherit)
ただし、Table 属性はどの dll でも表示されず、アセンブリに読み込まれた型としても表示されません。
私が間違っていることはありますか?
前もって感謝します。
アップデート:
タイプを調べて属性をプルしようとするコードは次のとおりです。
foreach (var dll in dlls)
{
var asm = Assembly.LoadFile(dll);
var asmTypes = asm.GetTypes();
foreach (var type in asmTypes)
{
Table.Table[] attributes = (Table.Table[])type.GetCustomAttributes(typeof(Table.Table), true);
foreach (Table.Table attribute in attributes)
{
Console.WriteLine(((Table.Table) attribute).Name);
}
}
}