81

実稼働ビルド スクリプトの bin フォルダーから Obj ディレクトリと PDB を削除する MSBuild タスクを作成しようとしていますが、正しく動作しないようです。

これまたは同様のことを行う例、またはMSBuildでファイルとディレクトリを削除する簡単な例へのリンクはありますか?

4

8 に答える 8

137

これらのディレクトリ内のファイルを最初に削除してから、ディレクトリ自体を削除できます。

<Target Name="SomeTarget">
    <ItemGroup>
        <FilesToDelete Include="Path\To\Obj\**\*"/>
    </ItemGroup>   
    <Delete Files="@(FilesToDelete)" />   
    <RemoveDir Directories="Path\To\Obj\" />
</Target>
于 2009-09-27T01:17:23.517 に答える
100

ディレクトリ全体を削除する場合は、RemoveDirタスクが必要です。

<RemoveDir Directories="Path/To/Obj" />

また、ビンからPDBファイルを削除する場合は、削除タスクが必要になります。

<Delete Files="Path/To/Bin/MyApp.pdb" />

削除タスクではワイルドカードを使用できないことに注意してください。したがって、複数のpdbファイルがある場合は、引数としてItemGroupを指定する必要があります。

于 2009-09-25T17:49:07.087 に答える
19

私が抱えていたのと同じ問題に遭遇した可能性のある他の人のために投稿します。

MSBuildがTFSから最新のものを取得すると、ファイルは読み取り専用としてマークされるため、削除タスクは読み取り専用ファイルを削除できません。これを行う必要がありました。EXEC コマンドを使用して、読み取り専用ファイルを削除しました。

<ItemGroup>
    <FileToDelete Include="c:\temp\fileToDelete.txt"/>
</ItemGroup>
<Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/>
于 2011-12-14T17:04:49.707 に答える
5

このコードは非常に醜いので、飛行機酔いバッグが付属している必要があります。;-) しかし、削除するファイルのリストなどを作成しないため、高速です。

<Target Name="DeleteBuildFolder">
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
    <Exec Command="RmDir /S /Q &quot;$(BuildFolder)&quot;" />
</Target>

RmDir コマンドはいくつ必要ですか? いくつかの RmDir コマンドは、「ディレクトリが空ではありません」ではなく、「指定されたファイルが見つかりません」を返します。私のマシンでは、Windows エクスプローラーで $(BuildFolder) が開いている場合、別の RmDir が必要なようです。ウイルス対策プログラムは、Subversion と同じように RmDir に影響を与える可能性がありますが、除外リストを (誤って) 管理するよりも、包括的な AV 保護を使用したいと考えています。

于 2011-08-31T00:41:34.830 に答える
4

最初にファイルから読み取り専用プロパティを削除し、msbuild delete タスクを実行することもできます。

そのようです:

<Target Name="DeleteFiles">
 <Message Text="Delete File" Importance="high"/>
 <Attrib Files="$(FileToDelete)" ReadOnly="false" />
 <Delete Files="$(FileToDelete)" />
</Target>`
于 2012-07-17T11:57:28.350 に答える
3

</Project>Visual Studio 2013 では、これを .csproj ファイルの末尾の終了タグの直前に追加しました

<Target Name = "clean_folders" AfterTargets="Clean">
 <Exec Command = "rd /S /Q obj" />
 <Exec Command = "rd /S /Q bin" />
</Target>

最初は動作していないように見えましたが、Visual Studio (または R#、確かではありません)DesignTimeResolveAssemblyReferencesInput.cacheが obj フォルダーに再追加され、現在の\binフォルダーも再追加されていることに気付きました (下の異なるサブフォルダーに異なるビルドがあります) \bin)。インポートした.csprojファイルから持っている25の他のビルド構成を含め、他のすべてを一掃しました(はい、知っています)。

複数の構成をバッチ再構築する場合は注意してください。再構築するたびに以前のすべての作業が消去され、最後のものだけが残ります。おっと。

于 2014-08-03T23:07:44.830 に答える
2

私が発見したしわをもう 1 つ追加するだけです。私はVisual Studio 2015を使用しています。ワイルドカードを介して削除されている投稿された回答は、まだ面倒です。 ワイルドカードは、ビルドの後ではなく、ビルドの前に評価されると思われます。つまり、削除したいファイルがビルド中に作成された場合、削除は行われません。また、ビルドするたびに削除が機能するという素晴らしい動作にもつながります。これにより、テストが非常に楽しくなります。

ワイルドカードをあきらめています。私がやっていることについては、問題を引き起こしているファイルを知っており、実際のファイル名をハードコーディングしています (プロジェクトファイル内でそれを呼び出すことができる場合)。

于 2016-03-31T19:26:30.810 に答える