【发布时间】:2017-11-22 12:39:23
【问题描述】:
我有以下场景:
一个宿主应用程序,它宿主(win)在同一解决方案的其他项目中定义的表单。托管的表单都实现了相同的接口。由于宿主应用程序引用了所有其他项目,因此不涉及(也不需要)动态加载(程序集解析)。
现在我认为我可以迭代AppDomain.CurrentDomain.GetAssemblies(),获取所有类型并过滤哪些类型实现了我的接口。但由于我从未明确使用主机项目中的其他项目,因此程序集不会加载到主机应用程序中,因此AppDomain.CurrentDomain.GetAssemblies() 不会列出它们。
我认为在大多数情况下这种行为是好的,但在我的情况下(反射使用)这是一个问题。有没有办法强制加载被引用但未明确使用的(特定)程序集?我正在寻找视觉工作室/项目设置的方法来做到这一点 - 我不喜欢编写代码来加载已经引用的程序集的想法:(
可能的解决方案:
- 为每个程序集致电
Assembly.Load。缺点:主机应用程序中的代码更改 - 从表单项目中调用已知的类/方法来强制加载。缺点:主机应用程序中的代码更改以及要调用的类/方法的知识
【问题讨论】:
-
所以你想在不写任何代码的情况下做到这一点,对吧?
-
@Evk 我不想在每次添加新项目时添加代码。如果代码能够处理新添加的项目引用(忽略其他未引用的 DLL)而无需修改,那就没问题了。
-
那个答案是 7 岁,请注意。现在可能有更好的选择。
-
我不确定这是否是您想要的,但您可以使用 T4 模板枚举解决方案中的所有项目及其引用的程序集,并输出包含信息的代码文件。跨度>