問題場景
前置條件
使用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
為模組專案。