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 为模块项目。

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Prism加载module时,应该使用正确的文件路径来确保系统能够到指定的文件。 在使用Prism加载module时,有两个常见的路径问题可能导致系统不到指定的文件。首先,确保指定的文件实际上存在于你指定的目录中。其次,检查程序运行时的当前工作目录是否与你期望的目录路径一致。 如果系统不到指定的文件,可以先使用绝对路径来确保文件存在于你指定的目录中。可以通过使用绝对路径来指定文件的完整路径,例如"C:/Users/username/directory/module.dll"。这样,你就可以直接指定要加载的文件路径,而不依赖于系统的当前工作目录。 另外,还可以使用相对路径来指定文件的位置。相对路径是相对于当前工作目录的路径。可以使用 ".." 表示上一级目录,以此类推,直到达到目标文件所在的目录。确保当前工作目录正确设置,以便系统能够到相对路径下的文件。 此外,还需要检查所使用的目录路径是否正确。可能会出现多种原因导致加载module失败,如文件名拼写错误、文件路径不正确、目录不存在等等。检查目录的正确性和文件的存在性对于成功加载module非常重要。 总之,在使用Prism加载module时,确保指定的文件路径正确、文件存在于指定目录中,并且程序的当前工作目录正确设置,这样可以避免系统不到指定的文件的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值