所以我正在尝试使用反射从 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);
}
}
}