web-dev-qa-db-ja.com

Visual Studioでビルドが完了した後のZipファイル

ソリューションファイルをビルドした後、いくつかのファイルを圧縮する必要があるという要件があります。

リリース/デバッグモードでプロジェクトをビルドすると、これは自動的に達成されますか?

18
nishantcop

通常、Zipファイル、インストーラー、NuGetパッケージなどを実際のプロジェクトに作成することはありません。
なぜ?そこに置くと、毎回実行されるためデバッグ中などに、Visual Studioでプロジェクトをビルドしています。
しかし、Zipファイル、インストーラーなどは、リリースするときにのみ必要です。 Visual StudioでF5キーを押すたびに再生成されます。

リリースを作成するには、通常、リリースを作成するために必要なすべてのものを作成する MSBuildプロジェクトファイル を実行するバッチファイルを作成します。
Zipファイルを作成するIMOは、そのMSBuildプロジェクトファイルにも属します。

私が必要とするすべての情報は、これら2つの以前の回答で見つけることができます。

さらに、 MSBuildプロジェクトファイルの例は次のとおりです 私のプロジェクトの1つで、次のことを行います。

  • プロジェクトをビルドする
  • 単体テストを実行する
  • バイナリを含む2つのリリースフォルダーを作成します(1つDLLおよび1つ.exe))
  • バイナリを含むフォルダごとに1つずつ、2つのZipファイルを作成します
  • dLLのNuGetパッケージを作成する
  • .exeのClickOnceセットアップを作成する
  • すべてに対して正しいバージョン番号を自動的に設定する

このアプローチの優れた点は、1回のクリック(バッチファイルの実行)で、今リストしたばかりのすべてを含むリリースを作成できることです。
これらすべての作成にはしばらく時間がかかりますが、これはVisual Studioソリューションの一部ではないため、Visual Studioでビルドを実行するたびに実行されるわけではありません。本当に必要な場合にのみ実行します。

11

PowerShellを使用して、リリースビルドを実行する場合のみ:
if $(ConfigurationName) == Release (powershell Compress-Archive -Path '$(TargetDir)*.dll', '$(TargetDir)*.pdb', '$(TargetDir)*.config' -DestinationPath '$(SolutionDir)PublishOutput\YourNameHere.Zip' -Force)

Dll、pdb、configファイルのみを圧縮します。
-Forceは、各ビルドでZipファイルを上書きするために使用されます。

19
ArieKanarie

プロジェクトのプロパティに移動し、[ビルドイベント]タブの[ビルド後のイベント]領域にコマンドを記述します。そこでのコマンドは、Cmdバッチファイルと同じように(またはCmdバッチファイルとして)実行されます。

また、いくつかの「マクロ」が利用可能であり、プロジェクトフォルダなどを参照するのに役立ちます。確認してください。

また、Jasonのコメントに追加するには、バッチファイル自体をビルド後のコマンドとして呼び出すこともできます。

(ビルド後のイベントに関する1つの警告:ビルド後に実行されます。ただし、CSCターゲットがある場合は、ビルド後にコンパイルされますandビルド後のイベントの後。これらのCSCターゲットの出力ファイルは、post-compileイベント。)

4
TaW