从dll中的嵌入式.resx访问字符串资源?

时间:2013-07-13 07:10:47

标签: c# winforms resources

我对资源文件完全不熟悉,但是我需要将我的应用程序部署为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个小时。

为那些尝试过的人干杯:)

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;