问题场景
前置条件
使用Prism
实现的目录配置方式加载插件;
有两个模块插件:ModuleA
以及 MouduleB
。
问题现象
独立项目作为插件被加载时,加载指定模块中的用户控件,程序能正常运行,点击模块进行加载。
但输出窗口显示找不到文件的错误。
通过[诊断工具]-[事件]-查看到实际有一个模块名.resources.dll
,程序在执行时,找不到。
解决方案
通过询问万能的群友,有老哥提到是否是本地化多语言。同时,进行本地限定条件排查发现,如果主程序直接引用对应的模块项目,程序运行调试时,并不会出现对应的错误,只有在目录加载时,才出现该问题。
通过查阅Prism Github
对应Issue
,找到如下内容:
查看最新的一条,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
enabledPrism
projects. Simply add this to the.csproj
file:
<NeutralLanguage>en-US</NeutralLanguage>
我尝试过en-US
,实际并没有解决问题,但是,方向应该是正确的的,毕竟Prism
其他使用者遇到过这样的问题,是不是配置值不对,毕竟当前UI
非特定语言默认到底是啥。通过主程序App.xaml.cs
的 OnStartup(StartupEventArgs e)
打印查看一下。
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var culture = Thread.CurrentThread.CurrentUICulture;
Debug.WriteLine($"当前UI线程语言:{culture.Name}");
}
输出如下,可以看到输出为zh-CN
。
尝试将之前的模块项目ModuleB
中非特定语言修改为zh-CN
。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<UseWPF>true</UseWPF>
<NeutralLanguage>zh-CN</NeutralLanguage>
</PropertyGroup>
</Project>
再重新生成则[输出窗口]和[诊断工具]输出如下:
输出窗口
诊断工具
涉及到案例中的案例地址,其中WPFShell
为主程序项目,WPFModuleA
、WPFModuleB
为模块项目。