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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有没有办法在使用c#扫描所有程序集时识别我的自定义程序集?相关的知识,希望对你有一定的参考价值。

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

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

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

答案

您可以使用内置程序集属性之一,例如CompanyName。将此属性添加到程序集中(或编辑,通常它已添加到AssemblyInfo.cs文件中):

[assembly: AssemblyCompany("My company")]

然后检查公司名称是否匹配:

static bool IsMyAssembly(Assembly asm) {
    var company = asm.GetCustomAttribute<AssemblyCompanyAttribute>();
    return company != null && company.Company == "My company";
}
另一答案

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

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

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

AppDomain.CurrentDomain.GetAssemblies()
    .Select(a => a.GetCustomAttribute<MyAttribute>()).Where(attr => attr != null && attr.CustomProp == "MyValue")

以上是关于有没有办法在使用c#扫描所有程序集时识别我的自定义程序集?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 Sentry 捕获日志并将它们发布到我的自定义后端?

我的 Joomla 模板正在使用 JS 加载我的自定义 CSS。有没有办法将唯一版本标签添加到我的自定义 CSS 中?即:custom.css?20180101

win10ie浏览器无法识别aw2000+扫描仪

自定义 UIControl 和手势识别器

如何仅列出我的自定义命令(Laravel)?

有没有办法为我的自定义 Keycloak 电子邮件主题添加样式?