我对资源文件完全不熟悉,但是我需要将我的应用程序部署为click-once,这似乎忽略了我的所有外部文件(图像,.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个小时。
为那些尝试过的人干杯:)
答案 0 :(得分:1)
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);
}
忽略我:)
答案 1 :(得分:0)
resName是资源的基本名称。在您的情况下,您可以简单地使用资源类的完整类型名称。
var resName = typeof(StringResource).FullName;