访问dll中嵌入的.resx中的字符串资源
本文关键字:resx 字符串资源 dll 访问 | 更新日期: 2023-09-27 18:22:07
我对资源文件完全陌生,但我需要以点击一次的方式部署我的应用程序,这似乎会忽略我的所有外部文件(图像、.ini文件等)-与其花时间试图弄清楚,我想我应该学会如何正确使用资源文件。
在搜索SO之后,我发现了很多代码,并构建了我的资源文件。到目前为止,它只包含字符串,我认为这会更简单!?唉。。。
因此,我有了我的DLL(ValhallaLib.DLL)和这两个用于处理资源的函数(这些函数保存在静态Helper类中,我所有随机但有用的函数都存在于该类中):
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个小时。
为那些尝试过的人欢呼:)
facepalm我已经想好了。我可以使用访问资源文件
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);
}
忽略我:)
resName是资源的基本名称。在您的情况下,您可以简单地使用资源类的完整类型名称。
var resName = typeof(StringResource).FullName;