Dot-Net

Xamarin.Forms + .resx 字元串資源-System.IO.FileNotFoundException:無效圖像

  • December 9, 2019

我正在創建一個基於 C# 共享程式碼項目的 Xamarin.Forms 應用程序和另外兩個用於實際 Android + iOS 應用程序的項目。

我現在想實現字元串本地化,就像這裡記錄的那樣。因此,我在我的解決方案中為 .resx 文件創建了一個 .net 標準 2.0 庫項目,並在我的兩個主要項目中引用了該項目,當然,我還執行了連結文章中描述的所有其他步驟。

當我現在想從我的一個應用程序項目中訪問我的任何字元串資源時,ResourceManager.GetString會拋出此異常:System.IO.FileNotFoundException: Invalid Image

範常式式碼將是該行,但它也可以是任何其他字元串資源。

public static string global_copyright {
   get {
       return ResourceManager.GetString("global_copyright", resourceCulture);
   }
}

我可以確認該庫項目的程序集已找到並正確載入,因為我可以創建該項目中定義的其他類的實例。

現在我將這段程式碼直接放在 App() 建構子的開頭,就像那篇文章中描述的那樣,以調試此類問題:

var assembly = typeof(AppResources).GetTypeInfo().Assembly;
foreach (var res in assembly.GetManifestResourceNames())
{
   System.Diagnostics.Debug.WriteLine("found resource: " + res);
}

var test = AppResources.global_copyright;

第一行執行得很好,它告訴我在該程序集中找到了一個資源文件。它的名字也是正確的。但在最後一行,它因該異常而崩潰。我做錯了什麼?為什麼 ResourceManager 無法從該程序集中載入字元串資源?

帶有 Xamarin.Forms v3.4 的 Visual Studio 2017 (15.9.6)

由於還沒有真正的答案,我想提出一個解決方法作為初步答案,直到有人找到更好的答案。

首先,問題仍然存在於帶有 Xamarin.Forms v3.6 的 Visual Studio 2019 (16.1.2) 中

我發現它發生是因為在 Visual Studio 異常設置中我檢查了所有“公共語言執行時異常”。當我禁用該設置時,可以毫無問題地調試應用程序並且正確載入資源字元串。

接下來,我發現它似乎是 ResourceManager 的一個內部異常,無論出於何種原因,它都會冒泡到我自己的程式碼中。只需在引發此異常時按 F5 繼續調試(必須執行兩次,但僅在您第一次訪問資源時)並且應用程序繼續正常執行。

所以有三種可能的解決方法:

  1. 在異常設置中禁用“通用語言執行時異常”截屏
  2. 在異常設置中,選中“公共語言執行時異常”,但只禁用“System.IO.FileNotFoundException”中斷。截圖 2
  3. 拋出該異常時,只需繼續使用 F5 進行調試

引用自:https://stackoverflow.com/questions/54465686