.csprojファイルで、<None Include =“…”>は何のためにありますか?


137

いかがですか

<None Include="C:\foo.bar" />

と違う

<Content Include="C:\foo.bar" />


7
いくつかContentのsがsに変更されましたNone。Razorに変換するときに、ファイルの名前を.ascxから.cshtmlに変更したときに発生したと思います。それらを手動で元に戻すと、いくつかの展開の問題が修正されました。嬉しいです。
Chris

回答:


135

ビルドアクションプロパティに関するMSDNの記事で違いを説明しています。

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

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


5
おかげで、この参照を見つけるのに苦労しました。
エメット

役に立ちましたが、ファイルを出力に含めない場合、なぜ「なし」の項目があるのでしょうか。ポイントは何ですか?
JimH44

1
@ JimH44 <None>アイテムは、デフォルトでは出力グループに含まていなくても、ファイルを出力ディレクトリにコピーするためによく使用されます。<None>ファイルに対して[Copy to Output Directory]-> [Copy Always]を選択すると、ファイルがコピーされ、プロジェクトの.csprojファイルに追加されたエントリに<None>エントリが表示されます。ファイル用。
目立つコンパイラ

3
それでは、「出力ディレクトリにコピー」->「常にコピー」の<None>ファイルと「出力ディレクトリにコピー」->「常にコピー」の<Content>ファイルの違いは何ですか?
ハッシュテーブル

30

1つの違いは、それらが公開される方法です。「なし」アイテムはパブリッシュに含まれませんが、「コンテンツ」アイテムは含まれます。たとえば、[公開]タブの[アプリケーションファイル]ダイアログなどです。


8
違います。少なくとも新しいドットネットのCLIでは。CopyToOutputDirectoryセットが[ なし]と宣言されているアイテムがある場合は、true公開されますdotnet publish
disklosr

13

100%確信はありません(ビルドアクションプロパティのMSDNの説明を読みます)が、その回答をMSDNからStackOverflowにコピーするだけでは、質問に対する完全な回答にはなりません。

NoneContentの違いは、Webプロジェクトにのみ影響します。コマンドラインプロジェクト、WinFormプロジェクト、UnitTestプロジェクト(私の場合)など。なしコンテンツに異なる動作はありません。

MSDN:「プロジェクト出力グループ」または「コンテンツ出力グループ」とは、Webプロジェクトで使用されている用語のみです。


2
あなたが言うように、Nonevs は構築ステップではなく公開ステップにContentのみ効果があるようです。ビルドステップのどちらかで設定できるようで、ファイルがビルドステップによってコピーされるかどうかを制御します。また、デフォルトではT4テンプレートがアイテムではなくアイテムとして追加されるのも奇妙に思われます。CopyToOutputDirectoryContentNone
クリストファーキング

8

私の状況では、MSBuildファイルには、ItemGroup次のように表示されるイメージリソース用のがありました。

  <ItemGroup>
    <Content Include="Resources\image001.png" />
    <Content Include="Resources\image002.png" />
    <Content Include="Resources\image003.png" />
    <Content Include="Resources\image004.png" />
    <None Include="Resources\image005.png" />
    <None Include="Resources\image006.png" />
    <None Include="Resources\image007.png" />
  </ItemGroup>

プロジェクトが正常に構築されていたので、にContentNoneアイテムタイプの要素が混在している理由を知りましたItemGroup。このMSDNの記事(Visual Studio 2010用)は、私が探していたガイダンスを提供してくれました。

.resxファイルは画像ファイルを参照するため、リソースエディターが画像を追加すると、ビルドアクションなしに設定されます。ビルド時に、イメージは.resxファイルから作成された.resourcesファイルに取り込まれます。次に、.resxファイル用に自動生成された厳密に型指定されたクラスを使用して、イメージに簡単にアクセスできます。したがって、これを行うと、アセンブリにイメージが2回含まれるため、この設定をEmbedded Resourceに変更しないでください。

解決策:このガイダンスに従って、テキストエディターを使用して、Contentアイテムタイプの要素をNone

また、MSBuildアイテムの概要については、このMSDNの記事を参照してください


3

コンパイル可能なアイテムを含まないプロジェクトがあります(jasmineユニットテスト用のhtmlとjavascriptが格納されています)。

ある日、私のソリューション(上記のプロジェクトを含む)が「ターゲット「ビルド」がプロジェクトに存在しない」と言ってコンパイルを停止しました。

コンパイラーを取り込むためのインポートを追加しましたが、私のマシンでは問題なく機能しましたが、ビルドサーバーでmsbuildを使用できませんでした。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

次に、行を変更しました

<None Include="SpecRunner.html" />

<Content Include="SpecRunner.html" />

ビルドサーバーでも動作しました。


2

.vstemplateで定義したファイルを含めるには、テンプレートプロジェクトファイルにNoneが必要です。そうしないと、作成および変換プロセスでファイルが失われます。それらは、すべてをビルドするために使用する一時フォルダーに残され、その後すぐに削除されます。


1

私の場合、.PubxmlNoneの中でそれらのファイルの1つですリストにある。ソリューションの構築や、Webプロジェクトの静的ファイルとしては使用できません。しかし、サイトをAzureに公開するために、構成はこの中に存在します。

Microsoftの記事によると、これらは.csprojファイルタグの中で見られる主なタイプです。

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

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

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

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


1
何か誤解を招く、または不明確な場合は、ここにコメントしてください。反対票を投じても、それを改善するのに役立ちません。前もって感謝します。
クリシュナカンス

1
よくエラーが発生しました。インクルードの "なし"要素名 "Properties \ PublishProfiles \ FolderProfile.pubxml"は "コンテンツ"である必要があります。Bambooの私のAsp.Netプロジェクトで、いつか再実行するとビルドが修正されるだけなので、問題が正確にわからない
Bochen Lin

こんにちは@BochenLinです。ここで述べた詳細は少し不十分です。詳細をここに記載するか、問題の詳細と可能な場合はスクリーンショットを添えて新しい質問を投稿してください[そして、ここに質問リンクを共有してください]。
クリシュナ・カンス

0

コンテンツファイルはビルドには含まれていませんが、パブリッシュには含まれています。

なしファイルは、ビルドに含またり、彼らはあなたによって、そのように設定されている場合を除き、公開されていません。たとえば、[常に出力]または[新しい]の[出力ディレクトリにコピー]設定では、ビルドとパブリッシュの両方に含まれます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.