Loading

Prism 目录方式加载插件,提示`xxx.resources.dll`找不到

image.png

问题场景

前置条件

使用Prism 实现的目录配置方式加载插件;
有两个模块插件:ModuleA 以及 MouduleB
Pasted image 20240629115509.png

问题现象

独立项目作为插件被加载时,加载指定模块中的用户控件,程序能正常运行,点击模块进行加载。
Pasted image 20240629115816.png
但输出窗口显示找不到文件的错误。
Pasted image 20240629115710.png
通过[诊断工具]-[事件]-查看到实际有一个模块名.resources.dll,程序在执行时,找不到。
prism插件加载异常@1x.png

解决方案

通过询问万能的群友,有老哥提到是否是本地化多语言。同时,进行本地限定条件排查发现,如果主程序直接引用对应的模块项目,程序运行调试时,并不会出现对应的错误,只有在目录加载时,才出现该问题。
通过查阅Prism Github 对应Issue ,找到如下内容:
2b7570f68f0c2776548548793700eb1.png
查看最新的一条,FileNotFoundException on RequestNavigate() from module,其中提出了如下解决办法:

Maybe locale dependent issue then. But the exception is there, for sure.
Even though this issue was closed in world record speed, I'll take the time to spread the knowledge of how this exception is fixed in .NET Core enabled Prism projects. Simply add this to the .csproj file:

<NeutralLanguage>en-US</NeutralLanguage>

我尝试过en-US,实际并没有解决问题,但是,方向应该是正确的的,毕竟Prism 其他使用者遇到过这样的问题,是不是配置值不对,毕竟当前UI非特定语言默认到底是啥。通过主程序App.xaml.csOnStartup(StartupEventArgs e) 打印查看一下。

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    var culture = Thread.CurrentThread.CurrentUICulture;
    Debug.WriteLine($"当前UI线程语言:{culture.Name}");
}

输出如下,可以看到输出为zh-CN
Pasted image 20240629121714.png
尝试将之前的模块项目ModuleB中非特定语言修改为zh-CN

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <UseWPF>true</UseWPF>
	<NeutralLanguage>zh-CN</NeutralLanguage>
  </PropertyGroup>
</Project>

再重新生成则[输出窗口]和[诊断工具]输出如下:
输出窗口
Pasted image 20240629122631.png
诊断工具
Pasted image 20240629123011.png
涉及到案例中的案例地址,其中WPFShell 为主程序项目,WPFModuleAWPFModuleB 为模块项目。

posted @ 2024-06-29 13:45  关关长语  阅读(222)  评论(0编辑  收藏  举报