Windowsストアアプリで「埋め込まれたリソース」を取得してみましょう。
実行中のDLLアセンブリにアクセスするためには、下記のようにAssembly.GetExecutingAssemblyメソッド
でAssemblyオブジェクトを取得していました。
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
Windowsストアアプリでは、Assemblyクラスの静的メソッドのGetExecutingAssemblyメソッドが使用できませんので、代わりの手段を使用する必要があります。上記のコードはWindowsストアアプリではビルドエラーになってしまいますので、Assemblyを取得するためには下記のように書き換えることができます。
//using System.Reflection; var assembly = typeof(App1.App).GetTypeInfo().Assembly;
本記事内で紹介するサンプルコードのファイル構成は下図のような構成になっているものとします。プロジェクトのルートディレクトリに2003_00351.JPG
が存在しているということにします。
2003_00351.JPGのビルドアクションを埋め込まれたリソース
にしておきます。
準備が整いましたので、下記のサンプルコードで埋め込まれたリソースのストリームを取得してみましょう。
先ほどの方法でAssemblyオブジェクトが取得できましたので、引数にApp1.2003_00351.JPG
のように完全なリソース名で指定して、GetManifestResourceStreamメソッドで埋め込まれたリソースのストリームを取得します。
//using System.Reflection; var assembly = typeof(App1.App).GetTypeInfo().Assembly; var resStream = assembly.GetManifestResourceStream("App1.2003_00351.JPG");
アセンブリに埋め込まれているリソースの一覧を取得する
稀にGetManifestResourceStreamメソッドを使ったときに、戻り値がnull
になっていることがあります。大抵の場合はアセンブリに指定したリソースが含まれていないか、リソース名を間違っている可能性が高いです。GetManifestResourceNamesメソッドで、アセンブリに含まれるリソースの一覧を取得しましょう。
//using System.Reflection; var assembly = typeof(App1.App).GetTypeInfo().Assembly; var resourceNames = assembly.GetManifestResourceNames();
アセンブリにリソースが含まれているのか、正しいリソース名を指定できているかのか確認してみましょう。
関連記事
WindowsランタイムAPI(Windows Runtime API, WinRT API)を使ってアプリ開発する際に逆引きとしてお使いください。