5

わかりました、私の質問に対する答えがオンラインにあるような気がしますが、見つかりません。私がやろうとしているのは、CodeDom でコンパイルしているプログラムにテキスト リソース ファイルを追加し、コンパイルされたプログラムでそのテキスト ファイルにアクセスすることだけです。埋め込みリソースを追加するために、次のコードを使用しました。

        System.Resources.ResourceWriter writer = new System.Resources.ResourceWriter("Resources.resx");
        writer.AddResource("EoS.txt", Form1.MasterEncoder.GetBytes(Properties.Resources.Eos));
        writer.Generate();
        writer.Close();
        Parameters.EmbeddedResources.Add("Resources.resx");

ここで、"Parameters" はコンパイラ パラメーター オブジェクトで、"Eos.txt" はアプリケーション内のリソースである、書き込もうとしているファイルです。これは、プログラムをビルドするときにエラーをスローしませんが、フォーム読み込みイベントに追加したこのコードを使用して、新しくコンパイルされたプログラムでこのテキスト ファイルを取得しようとすると、次のようになります。

         _assembly = Assembly.GetExecutingAssembly();
         _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("Resources.EoS.txt"));
         TextFile = _textStreamReader.ReadToEnd();

「値を null にすることはできません。パラメータ名: ストリーム」というエラーが大まかに表示されます。「リソース」をプログラムの名前空間に変更したり、他の多くの小さな調整を試みましたが、何も機能しませんでした。完全に間違った方向に進んでいるかどうかはわかりませんが、問題は CodeDom にあると思います。助言がありますか?

4

1 に答える 1

1

これはほぼ確実に、リソース名の予期しない方法によるものです。頭のてっぺんから思い出せないときに使用する1つのトリックは、次のコード行を一時的に追加することです。

string[] resourceNames = _assembly.GetManifestResourceNames();

それにブレークポイントを設定し、正しい名前を思い出してから、それをコードにコピーします。

于 2014-02-20T14:52:57.273 に答える