Visual Studioプロジェクトプロパティのさまざまな「ビルドアクション」設定とは何ですか?


844

ほとんどの場合、Visual Studioがデフォルトで設定したものをそのまま使用します...ここでは、ソリューションエクスプローラーで選択した各ファイルのBuildActionプロパティを参照しています。いくつかのオプションがあり、それぞれが何をするかを知ることは困難です。

回答:


1015
  • なし:ファイルはプロジェクト出力グループに含まれず、ビルドプロセスでコンパイルされません。例としては、Readmeファイルなどのドキュメントを含むテキストファイルがあります。

  • コンパイル:ファイルはビルド出力にコンパイルされます。この設定はコードファイルに使用されます。

  • 内容:Application.GetContentStream(URI)を介して、ファイル(アセンブリと同じディレクトリ内)をストリームとして取得できます。このメソッドが機能するためには、ファイルを「コンテンツ」としてマークしたときにVisual Studioが優雅に追加するAssemblyAssociatedContentFileカスタム属性が必要です。

  • 埋め込みリソース:専用のアセンブリマニフェストリソースにファイルを埋め込みます。

  • リソース (WPFのみ):AppName.g.resourcesという名前の共有アセンブリアセンブリマニフェストリソース(同じ設定のアセンブリ内のすべてのファイルによる)にファイルを埋め込みます。

  • ページ (WPFのみ)xamlファイルをにコンパイルするために使用されますbaml。次にbaml、と同じ手法で埋め込まれResourceます(つまり、 `AppName.g.resourcesとして利用可能)

  • ApplicationDefinition (WPFのみ):アプリケーションを定義するXAML /クラスファイルをマークします。x:Class = "Namespace.ClassName"で分離コードを指定し、StartupUri = "Window1.xaml"でスタートアップフォーム/ページを設定します。

  • SplashScreen (WPFのみ)WPFアプリケーションが読み込まれると自動的に表示されるようにマークされた画像はSplashScreen フェードアウトします

  • DesignData:XAML ビューモデルをコンパイルして、Visual Studioでサンプルデータを使用してユーザーコントロールをプレビューできるようにします(モックタイプを使用)

  • DesignDataWithDesignTimeCreatableTypes:XAML ビューモデルをコンパイルして、ユーザーコントロールをVisual Studioのサンプルデータでプレビューできるようにします(実際の型を使用します)

  • EntityDeploy(Entity Framework)Entity Frameworkアーティファクトのデプロイに使用

  • CodeAnalysisDictionaryスペル規則のカスタム単語辞書を含むXMLファイル


9
DesignData」は「Blendability」に使用されます。これにより、WPFマークアップベースのデータを追加できます。つまり、正しい設定が適用されたときにデザイン時に表示されます。
PGallagher 2013年

6
また、ワンクリックデプロイを使用するとコンテンツが含まれますが、[新しい場合にコピー]を選択しても[なし]は含まれません。
Dax Fohl 2013年

4
Fakes、CodeAnalysisDictionary、XamlAppRefはどうですか?
Crono 2013年

1
@jxramosこの情報はプロジェクトファイルに保存されます。
Tobias

18
どうAdditionalFilesですか?私はそれをVS 2015で見ましたが、そのリファレンスを見つけることができませんでした。
Holistic Developer

111

ドキュメントから:

BuildActionプロパティは、ビルドの実行時にVisual Studioがファイルをどのように処理するかを示します。BuildActionには、次のいずれかの値を指定できます。

なし-ファイルはプロジェクト出力グループに含まれず、ビルドプロセスでコンパイルされません。例としては、Readmeファイルなどのドキュメントを含むテキストファイルがあります。

コンパイル-ファイルはビルド出力にコンパイルされます。この設定はコードファイルに使用されます。

コンテンツ-ファイルはコンパイルされていませんが、コンテンツ出力グループに含まれています。たとえば、この設定は.htmまたはその他の種類のWebファイルのデフォルト値です。

埋め込みリソース-このファイルは、DLLまたは実行可能ファイルとしてメインプロジェクトのビルド出力に埋め込まれます。通常、リソースファイルに使用されます。


1
面白い!VS2008をインストールしましたが、ドキュメントに表示されなかったのはなぜですか?
ポール

PRIリソースについてはどうですか?
Yawar、2015年

1
@PaulBatumは、この引用された定義の参照を挿入できますか?
Rajan Prasad 2015年

@Raymond 232:引用された定義は何ですか?
Peter Mortensen、

1
@PaulBatum:はい、確かに参照はいいでしょう。答えは「ドキュメントから」から始まるので、このドキュメントへのリンクをいただければ幸いです。
マルク

35

ページ-指定されたXAMLファイルを取得してBAMLにコンパイルし、その出力をアセンブリのマネージリソースストリーム(具体的にはAssemblyName.g.resources)に埋め込みます。さらに、ルートXAML要素に適切な属性がある場合、ファイル、blah.g.csファイルを作成します。このファイルには、そのページの「分離コード」の部分クラスが含まれます。これには基本的に、BAML goopを呼び出してファイルをメモリに再水和し、クラスのメンバー変数のいずれかを現在作成されているアイテムに設定します(たとえば、アイテムにx:Name = "foo"を配置した場合) 、これを行うことができます。foo.Background= Purple;または同様の。

ApplicationDefinition-Pageに似ていますが、さらに一歩進んで、アプリオブジェクトをインスタンス化し、その上でrunを呼び出すアプリケーションのエントリポイントを定義します。これにより、StartupUriプロパティによって設定された型がインスタンス化され、メインウィンドウが表示されます。 。

また、明確にするために、この質問は全体として結果セットでは無限大です。MSBuildタスクをビルドするだけで、誰でも追加のBuildActionを定義できます。%systemroot%\ Microsoft.net \ framework \ v {version} \ディレクトリを見て、Microsoft.Common.targetsファイルを見ると、さらに多くの情報を解読できるはずです(例:VS Pro以降では、プライベートクラスのユニットテストを支援するプライベートアクセサーを生成できる「シャドウ」アクションがあります。


より完全な参照回答を得るために、私があなたの回答の一部を岐州の回答にコピーしたことを気にしないでください。
Ian Boyd、

32

VS2010には、「ビルドアクション」のプロパティと「出力ディレクトリにコピー」のプロパティがあります。そのため、コピープロパティが「新しい場合にコピー」または「常にコピー」に設定されている場合、「なし」のアクションでもビルドディレクトリにコピーされます。

したがって、「Content」のビルドアクションは、「Application.GetContentStream」を介してアクセスするコンテンツを示すために予約する必要があります。

一部の外部にリンクされた.configインクルードに、「なし」の「ビルドアクション」設定と「新しい場合はコピー」の「出力ディレクトリにコピー」設定を使用しました。

G.


これをありがとう。しかし、私はこれをどのように/どこで行うかについて少し混乱しています。理想的には、「アップロード」フォルダを「含める」だけで、すべての子ファイルがパブリッシュに含まれます。
SamJolly 2013

これは、オブジェクトエクスプローラーの個々のアイテムのプロパティに適用されます。アイテムを選択するか、右クリックしてプロパティを選択すると、プロパティタブに表示されます。あなたが望むものについては、プロジェクトを右クリックしたときに既存のアイテムを追加する必要があるだけだと思います。ところで、既存のアイテムの追加ダイアログの保存ボタンにはドロップダウンがあり、これをリンクとして追加できます。フォルダ内にアイテムを追加する必要がある場合があります。
Gerard ONeill、2013

5

VS2008では、最も役立つと思われるドキュメントエントリは次のとおりです。

Windows Presentation Foundation WPFアプリケーション(WPF)の構築

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/wpf_conceptual/html/a58696fd-bdad-4b55-9759-136dfdf8b91c.htm

ApplicationDefinitionアプリケーション定義を含むXAMLマークアップファイル(ルート要素がApplicationであるXAMLマークアップファイル)を識別します。Installがtrueで、OutputTypeがwinexeの場合、ApplicationDefinitionは必須です。WPFアプリケーション、およびその結果、MSBuildプロジェクトは1つのApplicationDefinitionしか持つことができません。

ページコンテンツがバイナリ形式に変換され、アセンブリにコンパイルされるXAMLマークアップファイルを識別します。ページアイテムは、通常、分離コードクラスと組み合わせて実装されます。

最も一般的なページアイテムは、最上位の要素が次のいずれかであるXAMLファイルです。

Window (System.Windows..::.Window).

Page (System.Windows.Controls..::.Page).

PageFunction (System.Windows.Navigation..::.PageFunction<(Of <(T>)>)).

ResourceDictionary (System.Windows..::.ResourceDictionary).

FlowDocument (System.Windows.Documents..::.FlowDocument).

UserControl (System.Windows.Controls..::.UserControl).

リソースアプリケーションアセンブリにコンパイルされるリソースファイルを識別します。前述のように、UICultureはリソース項目を処理します。

コンテンツアプリケーションと共に配布されるコンテンツファイルを識別します。コンテンツファイルを記述するメタデータは、アプリケーションにコンパイルされます(AssemblyAssociatedContentFileAttributeを使用)。


4

Microsoft Connect(DesignDataおよびDesignDataWithDesignTimeCreatableTypesの説明)タイプのこのページはどうですか。引用:

次に、サンプルデータファイルの2つのビルドアクションについて説明します。

サンプルデータの.xamlファイルには、以下のビルドアクションのいずれかを割り当てる必要があります。

DesignDataサンプルデータ型は偽型として作成されます。このビルドアクションは、サンプルデータタイプが作成できない場合、またはサンプルデータ値を定義する読み取り専用プロパティがある場合に使用します。

DesignDataWithDesignTimeCreatableTypesサンプルデータファイルで定義されているタイプを使用して、サンプルデータタイプが作成されます。デフォルトの空のコンストラクターを使用してサンプルデータ型を作成できる場合は、このビルドアクションを使用します。

それほど信じられないほど網羅的ではありませんが、少なくともヒントが得られます。このMSDNウォークスルーは、いくつかのアイデアも提供します。これらのビルドアクションがSilverlight以外のプロジェクトにも適用できるかどうかはわかりません。


4
  • 偽物: Microsoftの偽物(ユニットテスト分離)フレームワークの一部。すべてのVisual Studioバージョンで使用できるわけではありません。偽物はプロジェクトでユニットテストをサポートするために使用され、アプリケーションの他の部分をスタブまたはシムで置き換えることにより、テストしているコードを分離するのに役立ちます。詳細:https : //msdn.microsoft.com/en-us/library/hh549175.aspx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.