我有一个Prism模块化应用程序,其中模块构建在目录编目中。如果我的模块引用了一个程序集,.Net程序集绑定程序无法在运行时找到该程序集,因为它正在主机应用程序bin文件夹中进行探测,而忽略了模块bin文件夹。使其工作的唯一方法是在主机应用程序中引用程序集。这是不可接受的IMO,因为模块化应用程序的重点是主机应用程序与模块分离,因此它不应该知道它们引用的是什么dll。
有没有办法配置程序集loader / binder来查看模块的输出文件夹中的引用程序集?
我发现了这个问题,除了在主机应用程序中添加引用外,它没有提供任何解决方案。
Prism assembly reference failure: System.Windows.Interactivity
答案 0 :(得分:0)
我不知道Prism中是否有开箱即用的东西,但您可以使用AppDomain.AssemblyResolve
事件手动实现某些内容。
您是否尝试过启用程序集绑定日志记录(FusionLog)来确认它肯定没有在该文件夹中查找?
请参阅How to enable assembly bind failure logging (Fusion) in .NET如何启用它。
Scott Hanselmans博客提供了如何使用它的教程(如果您以前没有使用过它):Using Fusion Log Viewer to Debug Obscure Loader Errors
AppDomain.AssemblyResolve
活动查看MSDN: AppDomain.AssemblyResolve事件,可以在此处找到动态加载特定模块的示例:MS Docs: Resolving Assembly Loads
请注意,您可以使用ResolveEventArgs.RequestingAssembly
获取请求的程序集名称,您可以使用它来找出要查找程序集的文件夹。