0

我对资源文件完全陌生,但我需要将我的应用程序部署为单击一次,这似乎忽略了我所有的外部文件(图像、.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 小时。

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

4

2 回答 2

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);
    }

不理我 :)

于 2013-07-13T07:24:23.783 回答
0

resName 是资源的基本名称。在您的情况下,您可以简单地使用资源类的完整类型名称。

var resName = typeof(StringResource).FullName;
于 2013-07-13T07:34:57.703 回答