2013-07-13 67 views
0

我完全不熟悉資源文件,但我需要將我的應用程序部署爲點擊一次,並且似乎忽略了所有的外部文件(圖像,.ini文件等)。比花時間試圖弄清楚,我想我會學習如何正確使用資源文件。從dll中的嵌入式.resx訪問字符串資源?

通過搜索後,我發現了很多代碼,並且構建了我的資源文件。到目前爲止,它只包含字符串,我認爲會更簡單!?唉...

所以我有我的DLL(ValhallaLib.dll)和這兩個函數用於處理資源(這些函數是在一個靜態的助手類,其中我所有的隨機但有用的功能居住):

public static Bitmap getImageByName(string imgName) 
    { 
     System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); 
     string resName = asm.GetName().Name + ".Properties.Resources"; 
     var rm = new System.Resources.ResourceManager(resName, asm); 

     return (Bitmap)rm.GetObject(imgName); 
    } 


    public static string getStringByName(string var) 
    { 
     System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); 
     string resName = asm.GetName().Name + ".Properties.Resources"; 
     var rm = new ResourceManager(resName, asm); 

     return rm.GetString(var); 
    } 

而且我試圖用一個簡單的打電話給他們:

CHelpers.getStringByName("db_host_address"); 

現在,除了得到一個MissingManifestException ...我的問題是,我不知道(似乎並不能找到一個直接的答案!!)resName應該是什麼。我的資源文件被稱爲:StringResource.resx - 然而,它不是一個說Assembly.ValhallaLib.StringResource的情況。

任何人都可以提供一些指導嗎?

更新 我已經試過global::ValhallaLib.StringResource - 但是這算不上什麼,我之後。

更新2 解決了它。我設法使它與:

public static string getStringByName(string var) 
    { 
     System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); 
     string resName = asm.GetName().Name + ".Properties.Resources"; 
     var rm = new ResourceManager("ValhallaLib.StringResource", asm); 

     return rm.GetString(var); 
    } 

我不知道爲什麼我發現如此過於複雜。可能是因爲我睡了大約2個小時。

乾杯那些誰嘗試過,雖然:)

+1

我想補充一點,這是你的代碼串'= resName asm.GetName()名稱+「.Properties.Resources」冗餘;',我沒有看到它的任何地方使用的範圍'getStringByName()'方法,它應該被刪除。 –

+0

是的,你是絕對正確的,它已被刪除:)謝謝! – LokiSinclair

回答

1

捂臉我已經想通了。我可以訪問使用

public static string getStringByName(string var) 
    { 
     System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); 
     string resName = asm.GetName().Name + ".Properties.Resources"; 
     var rm = new ResourceManager("ValhallaLib.StringResource", asm); 

     return rm.GetString(var); 
    } 

不理我了:)

0

resName是對資源的基本名稱的資源文件。在你的情況下,你可以簡單地使用資源類的完整類型名稱。

var resName = typeof(StringResource).FullName; 
+0

謝謝@SergeyIL - 我剛剛設法自己解決它。修改了這個問題。乾杯:) – LokiSinclair

相關問題