2

wpfmefアプリケーションで使用されるライブラリがあります。このライブラリには、いくつかのファイルが含まれています。それらの1つはapp.jsです。

ライブラリからapp.jsを文字列として読み取るにはどうすればよいですか。

PS:以前のコードから、以下のコードを使用してビットマップイメージにアクセス/作成できます。

private readonly BitmapImage _starImageSmall = new BitmapImage(new Uri("pack://application:,,,/MyFirstExtension;component/Star_16x16.png", UriKind.Absolute));

URIを生成した後、システムストリームとしてストリームにアクセスするにはどうすればよいですか?

4

2 に答える 2

4

このコードブロックは私を失敗させたことはありません:

private Stream GetEmbeddedResourceStream(string resourceName)
{
    Assembly assy = Assembly.GetExecutingAssembly();
    string[] res = assy.GetManifestResourceNames();
    for (int i = 0; i < res.Length; i++)
    {
        if (res[i].ToLower().IndexOf(resourceName.ToLower()) != -1)
        {
            return assy.GetManifestResourceStream(res[i]);
        }
    }
    return Stream.Null;
}

このコードブロックで注意すべき3つのこと:

  • このブロックは、呼び出し元のアセンブリやその他のアセンブリではなく、実行中のアセンブリAssembly.GetExecutingAssembly())で機能します。ニーズに合わせて変更してください(代替案については以下を参照してください)
  • resourceNameファイル名のみにする必要があります(たとえば、ファイルがに保存されている場合はresources/myRes.binGetEmbeddedResourceStream("myRes.bin")
  • リソースの「リソースタイプ」を「埋め込みリソース」に設定する必要があります

ただし、コードを任意のアセンブリで機能させる場合は、コードブロックを次のように変更できます。

private Stream GetEmbeddedResourceStream(string resourceName)
{
    return GetEmbeddedResourceName(resourceName, Assembly.GetExecutingAssembly());
}
private Stream GetEmbeddedResourceStream(string resourceName, Assembly assembly)
{
    string[] res = assembly.GetManifestResourceNames();
    for (int i = 0; i < res.Length; i++)
    {
        if (res[i].ToLower().IndexOf(resourceName.ToLower()) != -1)
        {
            return assembly.GetManifestResourceStream(res[i]);
        }
    }
    return Stream.Null;
}
于 2012-07-21T22:58:35.087 に答える
1

Assembly.GetManifestResourceStreamを使用して、アセンブリ内のリソースストリームを開くことができます。リソースの名前がわからない場合は、Assembly.GetManifestResourceNamesを使用してリソース名を列挙できます。

于 2012-07-21T20:15:27.000 に答える