0

私はリソース ファイルにまったく慣れていませんが、アプリケーションをクリック ワンスとしてデプロイする必要があり、それはすべての外部ファイル (画像、.ini ファイルなど...) を無視しているようです。それを理解しようとすると、リソースファイルを適切に使用する方法を学べると思いました。

SO を検索した後、多くのコードを見つけ、リソース ファイルを作成しました。これまでのところ、文字列しか含まれていませんが、もっと簡単になると思いました!? ああ...

したがって、DLL (ValhallaLib.dll) と、リソースを処理するための次の 2 つの関数を用意しました (これらの関数は、静的なヘルパー クラス内に保持され、ランダムではあるが有用な関数がすべて存在します)。

    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です。

誰でもガイダンスを提供できますか?

私が試した更新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 に答える