我完全不熟悉資源文件,但我需要將我的應用程序部署爲點擊一次,並且似乎忽略了所有的外部文件(圖像,.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個小時。
乾杯那些誰嘗試過,雖然:)
我想補充一點,這是你的代碼串'= resName asm.GetName()名稱+「.Properties.Resources」冗餘;',我沒有看到它的任何地方使用的範圍'getStringByName()'方法,它應該被刪除。 –
是的,你是絕對正確的,它已被刪除:)謝謝! – LokiSinclair