リリースモードビルドでXMLドキュメントファイルのコピーを防ぐ方法は?


82

いくつかのサードパーティコンポーネントを参照するVisualStudio2010プロジェクトがあります。それらのアセンブリには、私たち(そして私たちだけ)の開発者に役立つXMLドキュメントファイルが付属しています。また、プロジェクトがビルドされるたびに(デバッグモードまたはリリースモードのいずれかで)、これらのXMLファイルがビルドディレクトリにコピーされます。

Visual Studio内またはMSBuildを介して、ビルドディレクトリへのこれらのXMLファイルのコピーを無効にする設定またはスイッチが見つからないようです。ビルド後のスクリプトはオプションかもしれませんが、臭いです。何か案は?ありがとうございました。


1
明確にするために、[参照の追加]ダイアログでアセンブリへの参照を追加しました。ドキュメントをビルドすると、XMLファイルが出力パスに表示されますか?
イブラヒム橋見

回答:


112

プロジェクトをビルドすると、ResolveAssemblyReferenceタスクを介して.xml /.pdbファイルが収集されます。ResolveAssemblyReferenceが呼び出されると、関連ファイルのファイル拡張子のリストが渡されます。そのファイル拡張子のリストは、MSBuildプロパティAllowedReferenceRelatedFileExtensionsにキャプチャされます。デフォルトでは、そのリストには「.pdb; .xml」が含まれます。

関連するすべての参照ファイルを取得から除外する場合は、プロパティの値を、関連ファイルの拡張子がないものにオーバーライドするだけです。たとえば、AllowedReferenceRelatedFileExtensionsを「-」に設定できます。

それによって返されるファイルのリストをカスタマイズすることもできます。.pdbファイルのみを検索する場合は、を渡す必要がありますAllowedReferenceRelatedFileExtensions=".pdb"。その場合、.dll /.exeの横に.pdbファイルがある参照もコピーされます。これを使用して、.pdb /.xmlで終わらない可能性のある他の関連ファイルをコピーすることもできます。たとえば、MyAssembly.dllという名前の参照アセンブリがあり、その同じフォルダにMyAssembly.pdbとMyAssembly.fooが存在する場合、設定AllowedReferenceRelatedFileExtensions=".pdb;.foo"すると、.pdbファイルと.fooファイルの両方が出力ディレクトリにコピーされます。


これが答えです。どうもありがとうございました!
ウンベルト2012

15
これに対する答えを得るのに2年かかったのはおかしいです。
イブラヒム橋見

私は2年前にこれについてコメントしていることに気づきました。当時は答えなかったことをお詫びします:(
イブラヒム橋見

7
上の具体的方法:MSBuildのコマンドラインでこれを指定するか、プロジェクトファイルにstackoverflow.com/questions/2011434/...
yzorg

3
Visual Studioのどこで変更できAllowedReferenceRelatedFileExtensionsますか?
アポストロフィックス2016年

0

Visual Studioプロジェクトファイルは、他のmsbuildファイルと同じ形式です。したがって、構成名が「リリース」の場合、xmlファイルをコピーしないように、対応するセクションに条件を手動で追加できます。

変化するはずです

<ItemGroup>

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

またはこのようなもの。


3
VisualStudioプロジェクトとソリューションファイルはMSBuildファイルです。
AMissico 2011年

@AMissico間違っています、ソリューションファイルはMSBuildファイルではありません。
julealgon 2014

それらはプロジェクトファイル形式(XML)ではありませんが、それでもサポートMSBuildファイルです。環境変数を設定します(set MSBuildEmitSolution=1またはプロパティ引数(p:msbuildemitsolution=1)を渡します)
AMissico 2014

-4

.xml / .pdbがビルドアクション「コンテンツ」(など)としてマークされている場合は、それらを「なし」に変更できます。また、copy-to-build-outputがfalseであることを確認する必要があります

それらの両方が設定されていますか?


2
しかし、これを行うには、それらをプロジェクトアイテムとして追加する必要があります...または私は間違っていますか?
ウンベルト

コンパイラから生成された.PDBファイルと.XMLファイルは、再帰的なビルドエラーとファイルロックが発生するため、プロジェクトに含めないでください。
ジェイミーハワース2011年

1
@codegecko「なし」を見ましたか?インテリセンスなどを取得するには、ソースdllに隣接している必要があります。これで問題が発生したことはありません
MarcGravell

2
ゴミ箱について何か言った@codegecko?そこからは参照しません...私は通常、dll、XML、およびpdbを使用して/ libから参照します。
MarcGravell

1
ああ、今ペニーが落ちた、私は誤解した。それらを/ libフォルダーに含め、VS内を参照し、アイテムをソリューションフォルダーに追加し、出力タイプを「なし」として指定します。実際に私自身のプロジェクトでそれを使い始めるかもしれません-ありがとう!
ジェイミーハワース2011年

-5

リリースビルド時にXMLファイルをフォルダーにコピーすることの問題は何ですか?これは問題ないように思えます。本当の問題は、ファイルを取得してインストーラーに配置するコードにあるようです。自分のbin \ releaseフォルダーからサードパーティのdllを取得することは、私の意見では良い習慣ではありません。インストーラーに、ソースツリー内の独自のフォルダーからサードパーティのdllを取得させます。


2
問題は、これらのファイルにはIntelliSense機能を支援する以外の機能がないことです。それらをリリースファイルに含める意味はありません。その上、関係するインストーラーはありません...
Humberto

では、アプリをどのようにデプロイしていますか?
ラッセルマクルーア

3
したがって、私の解決策は、コピーしたくないファイルをコピーしないようにコピースクリプトを変更することです。
ラッセルマクルーア

2
それは確かに機能します。ただし、ビルドでファイルがコピーされないという理想的なソリューションではありません。この動作の背後にあるロジックを理解しようとしています。ありがとう!
ウンベルト

4
よく書かれたXMLドキュメントファイルは大きいです。ビルドごとにそれらをコピーすると、SSDの寿命が短くなります。
springy76 2012

-5

設定は、問題のプロジェクトのプロパティの[ビルド]タブで、[XMLドキュメントファイル]のチェックを外します。これは、。* projファイルのビルド構成に<DocumentationFile>適用できるものの下で呼び出されるMSBuildプロパティでもあり<PropertyGroup>ます。


3
この応答は不正確です。彼は、コントロールベンダーから提供された事前生成されたXMLファイルについて質問しています。応答は、独自のXMLファイルを生成している場合にのみ役立ちます。
Kevin Kalitowski 2012年

これは、<PropertyGroup>要素の.csprojファイルで設定できるようです:<AllowedReferenceRelatedFileExtensions> "。pdb"。= "" </ AllowedReferenceRelatedFileExtensions>
Jay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.