访问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个小时。

为那些尝试过的人欢呼:)

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

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;