Prism 目錄方式載入外掛,提示`xxx.resources.dll`找不到

关关长语發表於2024-06-29

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 為模組專案。

相關文章