我有一个包含多个项目的应用程序。当然,每个项目都会创建自己的dll。然后我们可以使用AppDomain.CurrentDomain.GetAssemblies().ToList()
来使所有程序集使用反射,原因有很多。
AppDomain.CurrentDomain.GetAssemblies()
将扫描存在的每个程序集,包括像我们使用其他依赖管理工具的Nuget拉取的标准数据或者包。如果我只想扫描我的项目而不是其他项目怎么办?
有没有办法让我的项目成为共享类型然后查找该共享类型?不幸的是,我的项目没有一个通用的名称模式来扫描名称,以便在这里开始或结束。
答案 0 :(得分:2)
您可以使用内置程序集属性之一,例如CompanyName
。将此属性添加到程序集中(或编辑,通常已添加到AssemblyInfo.cs
文件中):
[assembly: AssemblyCompany("My company")]
然后检查公司名称是否匹配:
static bool IsMyAssembly(Assembly asm) {
var company = asm.GetCustomAttribute<AssemblyCompanyAttribute>();
return company != null && company.Company == "My company";
}
答案 1 :(得分:0)
您可以使用以下方法过滤GAC程序集:
AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.GlobalAssemblyCache)
您可以为每个程序集添加自定义属性并进行查询:
AppDomain.CurrentDomain.GetAssemblies()
.Select(a => a.GetCustomAttribute<MyAttribute>()).Where(attr => attr != null && attr.CustomProp == "MyValue")