有没有办法在使用c#扫描所有程序集时识别我的自定义程序集?

时间:2018-03-01 15:15:48

标签: c# .net vb.net reflection .net-assembly

我有一个包含多个项目的应用程序。当然,每个项目都会创建自己的dll。然后我们可以使用AppDomain.CurrentDomain.GetAssemblies().ToList()来使所有程序集使用反射,原因有很多。

AppDomain.CurrentDomain.GetAssemblies()将扫描存在的每个程序集,包括像我们使用其他依赖管理工具的Nuget拉取的标准数据或者包。如果我只想扫描我的项目而不是其他项目怎么办?

有没有办法让我的项目成为共享类型然后查找该共享类型?不幸的是,我的项目没有一个通用的名称模式来扫描名称,以便在这里开始或结束。

2 个答案:

答案 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")