1

したがって、リフレクションを使用して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);
                    }
                }
        }
4

1 に答える 1