2017-10-28 13 views
0

NuGetパッケージに関連するプロジェクトポストビルドイベントの実行順序はどれですか?私は出力ディレクトリに不要なファイルをコピーするNuGetパッケージを持っています(DLLとEXEの両方がありますが、後者は必要ありません)。VS2017ポストビルドイベントでNuGetファイルを削除する

del /f /q "$(TargetDir)directory\*.exe" 

VS(MSBuild)が実際にこれらのファイルをコピーする前に呼び出されている可能性があります。

+0

出力ディレクトリにファイルをコピーするNuGetはMSBuildになりません。あなたのNuGetパッケージはどんなものですか?私はlibディレクトリにこれらのファイルがすべてあると仮定しているので、NuGetはこれらのファイルへの参照をプロジェクトファイルに追加します。 NuGetパッケージのカスタムMSBuildターゲットファイルを使用して、ビルドをカスタマイズしたり、.exeファイルをNuGetパッケージのツールフォルダに追加することができます。しかし、NuGetパッケージで何をしたいか正確にはわかりません。 –

+0

また 'packages.config'ベースのプロジェクトか、新しい' ProjectReference'システムを使用していますか? (後者はパッケージから資産(コンパイル/コンテンツファイル/ ...)を除外することができます) –

+0

新しいもの。以前の(パッケージフォルダ)では、単にパッケージのローカルコピーを変更して不要なファイルを削除するだけでした。しかし、新しいキャッシング機構ではそれほど単純ではありません。もし私がそれを避けることができれば、NuGetを変更したくはありません。私は、すべてが完了した後、いくつかの不要なファイルを出力から削除したいだけです。私はその排除をチェックアウトします。 –

答えて

1

VS(MSBuild)が実際にこれらのファイルをコピーする前に呼び出されている可能性があります。

はコメントで情報によると:

<Target Name="CopyNativeBinaries" AfterTargets="Build">、これはパッケージのターゲットファイルから です。

このインポートMSBuildターゲットは、ビルドが完了した後にコピータスクを実行するため、ポストビルドでコマンドラインを削除すると失敗します。それが理由CopyNativeBinariesPostBuildEventの後に4つのステップが来る理由です。

この問題を解決するために、我々は目標CopyNativeBinaries後順序で標的にビルド後のイベントコマンドラインを変換することができます:

詳細手順:

  1. をビルド後のイベントを削除します。
  2. プロジェクトをアンロードします。次に、プロジェクトの最後にちょうど終了タグ、スクリプト、以下の場所の前に:この設定後

    <Target Name="DeleteFile" AfterTargets="CopyNativeBinaries"> 
        <ItemGroup> 
        <FileToDelete Include="$(TargetDir)directory\*.exe"/> 
        </ItemGroup> 
        <Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/> 
    </Target> 
    

DeleteFileはターゲットCopyNativeBinaries後に実行されます。

+0

ありがとうございました。 Delは提供されたファイルのリストが本当に好きではなかったので、ワイルドカードを与えるより簡単な解決法が直接それを解決しました。非常に良いアイデアと非常に論理的な見通しでは。 :-) '' –

関連する問題