引用的程序集未找到 - 如何获取解决方案中包含的所有DLL

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根本不加载其他程序集?这是如何工作的,我能做些什么呢?

Adi*_*dil 9

根据Microsoft文档AppDomain.CurrentDomain.GetAssemblies()获取已加载到此应用程序域的执行上下文中的程序集.关于AppDomain.CurrentDomain.GetAssemblies()

您似乎需要更改从使用appdomain加载所需程序集的策略,以便在应用程序文件夹中查找dll.

我在这里找到了关于类似问题的讨论