QA@IT
«質問へ戻る

質問を投稿

[C#] VisualStudioのビルドアクションについて

VSのビルドアクションの「なし」と「コンテンツ」についてです。

画像ファイルのビルドアクションに「コンテンツ」を指定して、XAMLでこのように画像ファイルを読み込んでいます。

<UserControl.Resources>
    <BitmapImage x:Key="icon" UriSource="pack://application:,,,/Resources/image.png" />
</UserControl.Resources>

ビルドアクションの「コンテンツ」はアセンブリにリソースを含まず外部にファイルを置くためのもので、「なし」はビルド時になにもしないものだと考えています。

これらの実際の処理の詳しいことを書いているページが見当たらないので探していたところ、外部にファイルを置くなら「なし」でもいいと書いてあるサイトをみかけました。

実行したときに指定のパスのファイルをロードするのであれば、「なし」にして、プログラム中に指定したファイルをビルドするフォルダにコピーする設定にするのでも、それ以前にVSではリソースを管理せずプログラムでパスだけ指定してビルド後に指定のパスにファイルを設置するのでも動くのでは?と思いました。

ですが、実際に試してみると「コンテンツ」を選んでいないとエラーになりました。

ビルドアクションはリソースファイルに対して設定するもので、XAMLなどURIを記述するところに書いてるわけでもないので、画像ファイルが「コンテンツ」でも「なし」でも動き変わらないのが普通だと思うのですが、どういう仕組みになっているのでしょうか?

VSのビルドアクションの「なし」と「コンテンツ」についてです。

画像ファイルのビルドアクションに「コンテンツ」を指定して、XAMLでこのように画像ファイルを読み込んでいます。
```
<UserControl.Resources>
    <BitmapImage x:Key="icon" UriSource="pack://application:,,,/Resources/image.png" />
</UserControl.Resources>
```

ビルドアクションの「コンテンツ」はアセンブリにリソースを含まず外部にファイルを置くためのもので、「なし」はビルド時になにもしないものだと考えています。

これらの実際の処理の詳しいことを書いているページが見当たらないので探していたところ、外部にファイルを置くなら「なし」でもいいと書いてあるサイトをみかけました。

実行したときに指定のパスのファイルをロードするのであれば、「なし」にして、プログラム中に指定したファイルをビルドするフォルダにコピーする設定にするのでも、それ以前にVSではリソースを管理せずプログラムでパスだけ指定してビルド後に指定のパスにファイルを設置するのでも動くのでは?と思いました。

ですが、実際に試してみると「コンテンツ」を選んでいないとエラーになりました。

ビルドアクションはリソースファイルに対して設定するもので、XAMLなどURIを記述するところに書いてるわけでもないので、画像ファイルが「コンテンツ」でも「なし」でも動き変わらないのが普通だと思うのですが、どういう仕組みになっているのでしょうか?