我上课了:
public class Domain
{
public static Assembly[] GetAssemblies()
{
var assemblies = new List<Assembly>();
foreach (ProcessModule module in Process.GetCurrentProcess().Modules)
{
try
{
var assemblyName = AssemblyLoadContext.GetAssemblyName(module.FileName);
var assembly = Assembly.Load(assemblyName);
assemblies.Add(assembly);
}
catch (BadImageFormatException)
{
// ignore native modules
}
}
return assemblies.ToArray();
}
}
我的主要课程如下:
class Program
{
public static Dictionary<String, Type> animals;
static void Main(string[] args)
{
var assTab = Domain.GetAssemblies();
foreach (var assembly in assTab)
{
var m = assembly.GetCustomAttribute<Method>();
if (m != null)
{
animals.Add(m.Name, assembly.GetType());
}
}
Method是MethodAttribute
类。在Animal.dll
我有类似Dog,Cat等的类,其属性为[Method("cat")]
,依此类推。在我的字典中,我想将此属性名称添加为字符串,并键入类型(dog, Dog)
,依此类推。我的问题是我的程序不这样做。在变量动物中运行程序后,我有0分。我应该改变什么来实现我想要的?
答案 0 :(得分:0)
问题出在这一行:
var m = assembly.GetCustomAttribute<Method>();
此行获取程序集的属性。因此,如果该属性未应用于程序集,那么您将返回null。
您需要做的是首先获取程序集中的类型,然后检查每个类型是否具有该属性。更像是这样:
foreach(Type type in assembly.GetTypes())
{
var attr = assembly.GetCustomAttribute<Method>();
if (attr!=null)
{
animals.Add(attr.Name, type);
}
}