eou*_*3hf 5 .net c# reflection assemblies
我正在运行一个WCF应用程序,CoreApplication其VS项目有一个引用AncillaryProject.CoreApplication使用Provider来自的类AncillaryProject; 但是,它永远不会被明确引用 - 它是通过Reflection调用的.
我的问题是有时候 CoreApplication找不到Provider因为AncillaryProject没有在调用中出现GetAssemblies().有时它工作正常,但有时(我猜它可能是在JIT之后)它失败了.
这是我的原始代码:
var providers = from d in AppDomain.CurrentDomain.GetAssemblies()
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
Run Code Online (Sandbox Code Playgroud)
看完这个问题后,我尝试使用GetReferencedAssemblies():
var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
allAssemblies = allAssemblies.Union(
a.GetReferencedAssemblies()
.Select(b => System.Reflection.Assembly.Load(b)));
}
var providers = from d in allAssemblies
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
Run Code Online (Sandbox Code Playgroud)
我意识到我引用的问题通过动态加载bin目录中的所有dll文件来解决问题,但这对我来说听起来不是特别好.有没有更好的方法来做到这一点,或者.NET根本不加载其他程序集?这是如何工作的,我能做些什么呢?
根据Microsoft文档AppDomain.CurrentDomain.GetAssemblies()获取已加载到此应用程序域的执行上下文中的程序集.关于AppDomain.CurrentDomain.GetAssemblies()
您似乎需要更改从使用appdomain加载所需程序集的策略,以便在应用程序文件夹中查找dll.
我在这里找到了关于类似问题的讨论
| 归档时间: |
|
| 查看次数: |
7691 次 |
| 最近记录: |