ビルド後の反復タスクを自動化するにはどうすればよいですか?
-
08-06-2019 - |
質問
私は、他のいくつかのプロジェクトを含む ASP.NET Web サイト ソリューションを実行しています。MSBuild プロジェクトでこれが可能であることは知っていますが、それが最善の方法でしょうか?作成は簡単ですか?nAnt、CruiseControl.NET、または他のソリューションの方が優れていますか?
サイトを構築するとき(を使用して) Web 導入プロジェクト)、プロジェクトの特定のフォルダーをリリース フォルダーにコピーしないように、ビルドの一部を自動化できますか?たとえば、ローカル検索インデックス、画像、およびフォルダー内のその他のコンテンツ部分を含むフォルダーがありますが、プロジェクトをデプロイするときにそれらを必要としたり、アップロードしたりすることはありません。
また、ビルド番号とバージョン番号を自動的に増やすこのタイプのソリューションにも注目しています。
解決
以下は、.wdproj ファイル内でこの種のタスクをスクリプト化する Web 配置プロジェクトの例です。
<Target Name="AfterBuild">
<!-- ============================ Script Compression============================ -->
<MakeDir Directories="$(OutputPath)\compressed" />
<Exec Command="java -jar c:\yuicompressor-2.2.5\build\yuicompressor-2.2.5.jar --charset UTF-8 styles.css -o compressed/styles.css" WorkingDirectory="$(OutputPath)" />
<Exec Command="move /Y .\compressed\* .\" WorkingDirectory="$(OutputPath)" />
<RemoveDir Directories="$(OutputPath)\sql" />
<Exec Command="c:\7zip-4.4.2\7za.exe a $(ZipName).zip $(OutputPath)\*" />
</Target>
これにより、フォルダーを削除できるようになります。
(フォルダーをコピーしたくない場合は、 まったく, 、ソリューション ファイルはそれを指定する場所になりますが、私はそれを使用する必要はありませんでした。)
他のヒント
MaseBase を使用できます Web 導入プロジェクト Web サイトを構築してパッケージ化するため。Web アプリケーションの側面を持つプロジェクトでは常にこれを行っています。WDP を Web サイトに割り当てた後、 .wdproj ファイルはプレーンテキストの XML ファイルとして保存されます。最後に、ビルド プロセス中に発生する一連のイベントを表す MSBuild ターゲットのコメントされたセクションがあります。
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.WebDeployment.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="BeforeMerge">
</Target>
<Target Name="AfterMerge">
</Target>
<Target Name="AfterBuild">
</Target>
-->
必要なターゲットのコメントを解除できます (例:"AfterBuild") を選択し、ビルド後のアクティビティを繰り返し実行するために必要なタスクをそこに挿入します。
個々のファイルに [ビルド アクション/出力ディレクトリにコピー] プロパティを設定して (ファイルを選択し、F4 キーを押してプロパティ ウィンドウを開きます)、ビルド中にファイルに何が起こるかを制御できますが、フォルダーに対しては制御できません。手動で実行したくない場合は、(事前) ビルド タスクを使用してこれを自動化できる可能性があります。
あるいは、これらのフォルダーをプロジェクトから除外することもできます (右クリックして「プロジェクトから除外」)。これらはまだ存在しますが (ソリューション エクスプローラーの「すべてのファイルを表示」)、プロジェクトのビルド時には含まれません。
CruiseControl.NET は別の問題 (継続的統合) を解決します。ただし、特にあなたが求めていることに関しては、NAnt を使用して大きな成功を収めました。学習には時間がかかりますが、一度上達すると、それなしでどうやってやっていたのかと不思議に思うでしょう。
プロジェクト項目を「出力ディレクトリにコピー」に設定するという @Fredrik のヒントに加えて、[ビルド] タブのプロジェクトのプロパティでビルド後のアクションを指定し、copy.exe や move.exe などの CMD コマンドを含めることもできます。
FinalBuilder を使用して、ビルド後のタスクやビルド前のタスクを自動化します。Web インターフェイスもあり、Web サイトにログインしてボタンをクリックすることでビルドを開始 (または Web サイトをプッシュ) できます。
Web 配置プロジェクトの MSBuild ファイルを編集して、希望どおりに実行することはできませんか?