web-dev-qa-db-ja.com

.NETアセンブリにテキストファイルを埋め込む方法

テキストファイルをアセンブリに埋め込み、テキストをディスクから読み込まずに読み込むことができ、必要なものがすべてexeに含まれるようにします。 (よりポータブルになるように)

これを行う方法はありますか?リソースファイルに何かがあると思いますか?

そして、可能であれば、どのようにそれを行い、どのようにプログラムでテキストを文字列にロードしますか?

116
Adam Haile

プロジェクトファイルを右クリックし、[プロパティ]を選択します。

開いたウィンドウで、[リソース]タブに移動し、タブページの中央に青いリンクがある場合は、それをクリックして、新しいリソースを作成します。

enter image description here

次に、タブページの上のツールバーから、新しいテキストファイルの追加を選択し、名前を付けます。プロジェクトに追加され、開かれます。

これまでのところ、コードにResources.TheNameYouGaveTheTextFileHereと入力して、そのコンテンツにアクセスできます。クラスでResourcesクラスを初めて使用するときは、usingディレクティブを追加する必要があります(Resourcesを入力してメニューを取得し、VSにそれを行わせるためにCtrl +を押します)。

上記の説明について不明な点がある場合は、コメントを残してください。コメントが完成するか意味があるまで編集します:)

Visual Studio 2003、Visual Studio 2005、および場合によってはそれ以前のバージョン(これも2008年で機能します)では、プロジェクトにテキストファイルを含め、[プロパティ]パネルでアクションを[埋め込みリソース]に設定できます。その後、Assembly.GetManifestResourceStream(string)を使用してストリームとしてファイルにアクセスできます。

ここの他の答えはより便利です。完全を期すためにこれを含めます。

このアプローチは、画像、アイコン、サウンドなど、他の種類のファイルを埋め込む場合に機能することに注意してください。

38
Drew Noakes

テキストファイルを埋め込んだ後、次のようなコードの任意の場所でそのファイルを使用します...

global::packageName.Properties.Resources.ThatFileName
30
Narottam Goyal

はい、あなたは正しいです-リソースファイルを作成します。文字列を「ロード」する必要がない場合、Resource.WhateverStringYouDefinedとして参照されます。

4
Otávio Décio

これが私のために働いたものです。 (実行可能な.NETイメージファイルに埋め込まれたファイルの内容を読み取る必要がありました。)

何かを行う前に、ファイルをVisual Studioのソリューションに含めます。 (私の場合、VS 2017 Community。)Solution Explorer、次にPropertiesフォルダを右クリックし、Add Existing Itemおよびファイルを選択しました。 (いう、 FileName.txt。)その後、まだSolution Explorer、含まれているファイルを右クリックし、Propertiesを選択して、Build Action なので Embedded Resource

次に、このコードを使用してそのバイトを読み取ります。

string strResourceName = "FileName.txt";

Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
    using (StreamReader sRdr = new StreamReader(rsrcStream))
    {
        //For instance, gets it as text
        string strTxt = sRdr.ReadToEnd();
    }
}

この場合、 受け入れられた回答 で提案されたように、そのファイルをリソースとして追加する必要はありませんことに注意してください.

1
c00000fd

ここに私がやったことがあります:

  1. プロジェクトを右クリックして、Visual Studioにファイル(リソース)を追加しました。
  2. 追加したすべてのファイルを右クリックし、[ビルドタイプ]を[埋め込みリソース]に変更します。
  3. リソースにアクセスするには:

    a。関数を使用して現在のアセンブリを取得しました:GetExecutingAssembly()

    b。追加したリソースはテキストファイルであったため、GetManifestResourceStream(fileName)を使用してストリームに読み込みました。ファイル名にアクセスする方法は、GetManifestResourceNames()を呼び出すことです。

    c。必要に応じて、StreamReader()クラスを使用して、ファイルの最後まで変数に読み込みます。

1
Pavan

Pavanの答えに加えて、現在のアセンブリを取得するため(一般的なセクション):

Assembly _Assembly;

GetManifestResourceStream(fileName)(コードで、リソースからの読み取りが必要な場合):

try
{
    _Assembly = Assembly.GetExecutingAssembly();
    _textStreamReader = new StreamReader(_Assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
    Console.WritelLine("Error accessing resource!");
}
0
Narjis Hasan