.Net无法解析Prism模块引用的程序集

时间:2017-06-21 13:28:04

标签: c# .net .net-assembly prism-4

我有一个Prism模块化应用程序,其中模块构建在目录编目中。如果我的模块引用了一个程序集,.Net程序集绑定程序无法在运行时找到该程序集,因为它正在主机应用程序bin文件夹中进行探测,而忽略了模块bin文件夹。使其工作的唯一方法是在主机应用程序中引用程序集。这是不可接受的IMO,因为模块化应用程序的重点是主机应用程序与模块分离,因此它不应该知道它们引用的是什么dll。

有没有办法配置程序集loader / binder来查看模块的输出文件夹中的引用程序集?

我发现了这个问题,除了在主机应用程序中添加引用外,它没有提供任何解决方案。

Prism assembly reference failure: System.Windows.Interactivity

1 个答案:

答案 0 :(得分:0)

我不知道Prism中是否有开箱即用的东西,但您可以使用AppDomain.AssemblyResolve事件手动实现某些内容。

使用AssemblyLog进行诊断

您是否尝试过启用程序集绑定日志记录(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获取请求的程序集名称,您可以使用它来找出要查找程序集的文件夹。