簡體   English   中英

無法在C#應用程序中使用非本地化的資源

[英]Cannot use non-localized resource in C# application

如上一個問題所述 ,我擁有一組字符串資源,這些字符串資源在程序的生存期內不會更改,但是只能通過對字符串列表進行昂貴的操作才能獲得:

public static class Patterns
{       
    Public static readonly string StateUS =
        @"\b(?<STATE>" + CharTree.GenerateRegex(FixedLists.StateUS) + @")\b";

    Public static readonly string Countries =
        @"\b(?<STATE>" + CharTree.GenerateRegex(FixedLists.Countries) + @")\b";

    //.....
}

為了提高性能,我用T4生成了所需的字符串,該字符串從文件中讀取列表並輸出資源文件Regex.restext

StatesUS=A(LA(SK|BAM)A|RKANSAS)|B.....
Countries=UNITED (STATES|KINGDOM)|CA(NAD|MBODI)A.....

然后將此文件編譯並復制到目標目錄的構建后版本中:

cd $(ProjectDir)
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\resgen.exe" /compile Regex.restext
copy /Y Regex.resources "$(TargetDir)MyProject.Resources.Lists.resources"

但是,當我嘗試在Patterns的靜態構造函數中加載這些值時:

ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("MyProject.Resources.Lists", @".\", null);
StateUS = rm.GetString("StateUS")

我收到以下錯誤:

InnerException: System.Resources.MissingManifestResourceException
Message=Could not find any resources appropriate for the specified culture (or the neutral culture) on disk.
System.Resources.FileBasedResourceGroveler.GrovelForResourceSet(CultureInfo culture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark)
System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists, Boolean tryParents, StackCrawlMark& stackMark)
System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo culture, Boolean createIfNotExists, Boolean tryParents)

但這是一個與文化無關的項目-資源僅用於存儲。 那么,為什么我需要完全指定一種文化? 我將如何/在何處這樣做?

如果我采用錯誤的方式加載資源,哪種更好的方法呢?

此異常告訴您未找到MyProject.Resources.Lists.resources文件。 文件路徑或文件名本身可能不正確。 我通過創建一個示例應用程序驗證了您的示例,它運行良好。

您應該將@".\\"替換為Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location以確保您為資源文件使用了正確的位置。如果要設置Directory.SetCurrentDirectory("D:\\\\");在應用程序內的任何位置, @".\\"都會在此處查找您的資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM