【问题标题】:.Net can't resolve assemblies referenced by a Prism module.Net 无法解析 Prism 模块引用的程序集
【发布时间】:2017-06-21 13:28:03
【问题描述】:

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

有没有办法配置程序集加载器/绑定器以在模块的输出文件夹中查找引用的程序集?

我发现了这个问题,除了在宿主应用程序中添加引用之外没有给出任何解决方案。

Prism assembly reference failure: System.Windows.Interactivity

【问题讨论】:

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


    【解决方案1】:

    我不知道 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 获取请求的程序集名称,您可能会使用它来找出要在其中查找程序集的文件夹。

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 2021-10-28
      • 2018-05-05
      • 2012-04-23
      • 2012-01-23
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多