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

问题描述 投票:1回答:2

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

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

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

c# .net vb.net reflection .net-assembly
2个回答
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";
}

0
投票

您可以使用以下方法过滤GAC程序集:

AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.GlobalAssemblyCache)

您可以为每个程序集添加自定义属性并进行查询:

AppDomain.CurrentDomain.GetAssemblies()
    .Select(a => a.GetCustomAttribute<MyAttribute>()).Where(attr => attr != null && attr.CustomProp == "MyValue")
© www.soinside.com 2019 - 2024. All rights reserved.