10

完全に機能する完全なプロジェクトを作成しました。私の問題は、セットアップ プロジェクトに関するものです。別のコンピューターで使用すると、配置中にリソース フォルダー内にあるにもかかわらず、テキスト ファイルが見つかりません。

ソフトウェアを別のコンピュータにインストールした後、プログラムがそれらのテキスト ファイルを確実に見つけるにはどうすればよいでしょうか。

私はこの解決策を探していましたが、無駄でした。これを整理するのを手伝ってください。それを行う完全なコードを入手できれば、とても幸せです!

4

3 に答える 3

22

まず、テキスト ファイルのビルド アクションを「EmbeddedResource」に設定します。

次に、コードでファイルを読み取るには:

var assembly = Assembly.GetExecutingAssembly();
var resourceName = "AssemblyName.MyFile.txt";

using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
    using (StreamReader reader = new StreamReader(stream))
    {
        string result = reader.ReadToEnd();
    }
}

埋め込まれたリソースの名前がわからない場合は、これを実行して名前を見つけてください。ファイルが何であるかは明らかです。

assembly.GetManifestResourceNames();

これは、テキスト ファイルをアセンブリに埋め込むことを前提としています。そうでない場合は、セットアップ プロジェクトを変更して、インストール中にテキスト ファイルを含めることをお勧めします。

于 2013-08-07T16:35:19.160 に答える
2

プロジェクトに EmbeddedResource として設定したファイルがあると仮定すると、

using (var stream = Assembly.GetExecutingAssembly()
    .GetManifestResourceStream(path))
{
    ...
}

pathアセンブリ名の後に、プロジェクト フォルダー階層内のファイルへの相対パスを指定する必要があります。使用される区切り文字はピリオド.です。

したがって、呼び出されたアセンブリがあり、そのプロジェクトに を含むMyCompany.MyProjectフォルダーがある場合、そのパスを使用してを取得します。TestImage.jpgMyCompany.MyProject.Test.Image.jpgStream

于 2013-08-07T16:33:45.697 に答える
1

この関数を作成して、埋め込まれたリソース テキスト ファイルを読み取ります。

public string GetFromResources(string resourceName)
{
    Assembly assem = this.GetType().Assembly;

    using (Stream stream = assem.GetManifestResourceStream(resourceName))
    {
        using (var reader = new StreamReader(stream))
        {
            return reader.ReadToEnd();
        }

    }
}
于 2013-08-07T16:40:34.430 に答える