2013-02-25 162 views
1

我已經使用文件 - >新建項目>資源創建了一個資源文件,並放置了2個鍵和2個值。
如果我把它設置爲嵌入的資源的話,我可以做的和獲得的價值:C#資源處理

ResourceName.ResourceManager.GetString("Key"); 

但是,當我做到這一點時,不嵌入的資源,我得到異常。

A first chance exception of type 
'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll 

如何創建使用創建的資源初始化自己的ResourceManager對象?

我想:

ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager 
(resourceFile, filePath, null); 

時,路徑和文件名是確定,但對象爲null,並投擲例外。

我跟着this read value from source..,但也沒有工作。文件無法加載?

+0

爲什麼不能直接使用資源文件的靜態屬性。例如,你有一個名爲「ErrorMessage」的鍵,而你的資源文件名是「Messages」,你可以使用var error = Messages.ErrorMessage。 – Novice 2013-02-25 12:29:41

+0

你究竟如何添加它?我的Visual Studio 2012副本在「文件」菜單下沒有「新建項目」。如果我在解決方案資源管理器中右鍵單擊該項目,然後選擇添加 - >新建項目,則有兩個資源選項:「資源文件」和「資源字典(WPF)」,這兩個選項都不是您寫的內容。所以你不完全清楚你做了什麼。選擇前者(「資源文件」)它的工作原理,我沒有得到錯誤。所以我需要更精確的描述來提供幫助。 – 2013-02-25 14:11:42

+0

@IanGriffiths右鍵單擊項目,添加項目>資源文件。 (「Visual C#項目」) – ilansch 2013-02-25 14:53:16

回答

2

要回答這個ilansch在評論添加到原始問題的問題:

我也想有一個成員,我可以打電話和搜索鍵

這裏有一個方法(假設你已經添加了「資源文件」名爲「ResourceName.resx」到您的項目):

ResourceSet rs = ResourceName.ResourceManager.GetResourceSet(
    Thread.CurrentThread.CurrentUICulture, true, true); 
Dictionary<string, object> resources = rs.Cast<DictionaryEntry>().ToDictionary(r => (string) r.Key, r => r.Value); 

// Can now list all keys, e.g.: 
foreach (string key in resources.Keys) 
{ 
    Debug.WriteLine(key); 
} 

// ...or can find out whether a key is present: 
object v; 
if (resources.TryGetValue("Key", out v)) 
{ 
    Debug.WriteLine(v); 
} 

加載的所有資源在resou rce文件轉換爲Dictionary<string, object>,然後您可以使用它來發現密鑰。雖然這可能不是很有效,因爲它會將整個資源集合加載到內存中。

如果你只是想鍵的列表,你可以這樣做:如果

string[] keys = rs.Cast<DictionaryEntry>().Select(r => (string) r.Key).ToArray(); 

不知道,實際上幫助,因爲它不是我清楚你的總體目標是在這裏。

+0

謝謝你的詳細解答 – ilansch 2013-02-26 07:38:43