我真的不知道/有答案,知道如何使用c#中的程序集中的resx
文件找到資源值(或者我可能是無知的)。C# - 從彙編中獲取資源字符串的最快方法
什麼是最快的代碼,這樣我可以利用這嵌入作爲一個集資源的資源文件一鍵檢索string values
或values
。我正在爲資源文件中的異常存儲友好的消息,並希望在需要時使用它們。
是否存在用於此目的的靜態類?
是否有我可以使用的開源成熟項目?
我真的不知道/有答案,知道如何使用c#中的程序集中的resx
文件找到資源值(或者我可能是無知的)。C# - 從彙編中獲取資源字符串的最快方法
什麼是最快的代碼,這樣我可以利用這嵌入作爲一個集資源的資源文件一鍵檢索string values
或values
。我正在爲資源文件中的異常存儲友好的消息,並希望在需要時使用它們。
是否存在用於此目的的靜態類?
是否有我可以使用的開源成熟項目?
Assembly assembly = this.GetType().Assembly;
ResourceManager resourceManager = new ResourceManager("Resources.Strings", assembly);
string myString = resourceManager.GetString("value");
可以使用ResourceManger從大會
ResourceManager ResManager= new ResourceManager("yourResource",
Assembly.GetExecutingAssembly());
String strResourveValue = ResManager.GetString("YourStringKey");
得到的字符串值,如果資源是在同一個組件的代碼,那麼下面會做什麼:
String resourceValue = MyAssemblyNameSpace.Properties.Resources.ResourceName
只是一個更簡單的方法,通過這個resourceManager的東西。謝謝。 – C4u
當我爲名爲UnitTests的C#類庫類型的單元測試做了一個新項目時,我右鍵單擊並添加了一個新的資源。我將其命名爲UnitTestsResources。我爲該資源添加了2個字符串。當時我能夠方便地能夠訪問他們這樣
UnitTestsResources.NoDeviceRequireMsg
我很好奇,怎麼說工作,所以我拉昇的資源文件背後的代碼,它是有道理的。 Visual Studio中做靜態存取一個內部類。它看起來像這樣對我
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class UnitTestsResources {
//Some auto generated code
/// <summary>
/// Looks up a localized string similar to OPOS Device is required for test.
/// </summary>
internal static string DeviceRequireMsg {
get {
return ResourceManager.GetString("DeviceRequireMsg", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to OPOS Device must not be installed for test.
/// </summary>
internal static string NoDeviceRequireMsg {
get {
return ResourceManager.GetString("NoDeviceRequireMsg", resourceCulture);
}
}
}
因爲它是隻爲我的單元測試,我的內容與此有關。希望它可以幫助別人。
爲了改善herzbube的答案,我會告訴我如何實現這個..
而不是針對資源文件的創建項目或文件夾,只需右鍵點擊您的項目,不要添加 - >新項目,然後選擇資源文件。打開字符串中的資源文件夾,保存爲一個有用的名稱,然後導航到您想要使用它們的C#,然後它只是:
String resourceValue = MyProjectName.MyResourceFileName.MyResourceRowItem;
如果這沒有工作,請注意訪問修飾符下拉時,在您的resx文件中。
string val = Resources.ResourceManager.GetString("resource_name");
鑑於"resource_name"
您可以檢索資源值。
完美..... !!! –
var thread = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
var culture = new CultureInfo(thread);
var resourceManager = new ResourceManager(typeof(Resources.Resource));
string value = resourceManager.GetString(name, culture);
這就是我正在尋找的那個!我總是儘量避免像其他ResourceManager構造函數使用的字符串。 – madannes
嗨,感謝您的代碼。 Lin1不應用反射?性能如何。 – Deeptechtons
@deeptechtons,是的 - 有點兒。我其實不認爲GetType()。大會非常緩慢,但即使是這樣,大概你會在你的項目早期做一次。這個想法是,你應該將'resourceManager'存儲在應用程序的主對象或某處,並在需要獲取字符串時使用它。 – sblom
程序集是否在生命週期的早期階段提供事件,以便在發生異常時我只需檢索字符串而不是每次都實例化。 – Deeptechtons