nant から msbuild に切り替える必要がありますか?
-
08-06-2019 - |
質問
私は現在、nant、ccnet (クルーズコントロール)、svn、mbunit を使用しています。sln ビルドには msbuild を使用します。シェルアウトが簡単だからです。
ビルド スクリプト全体を MSBuild に切り替えるメリットはありますか?テスト、watir スタイルのテスト、xcopy デプロイを実行できる必要があります。これは簡単ですか?
アップデート:nant から msbuild に移行するきっかけとなる魅力的な機能はありますか?
解決
MSBuild が好きです。理由の 1 つは、.csproj ファイルが msbuild ファイルであり、VS でのビルドがコマンド ラインでのビルドと同じであるためです。もう 1 つの理由は、私が使用している CI サーバーである TeamCity のサポートが充実していることです。MSBuild の使用を開始し、ビルド プロセスでさらにカスタムなことを実行したい場合は、 MSBuild コミュニティ タスク. 。彼らはあなたにたくさんの素晴らしい追加タスクを与えます。私はここ数年 NAnt を使用していませんが、後悔していません。
また、Ruben が言及しているように、 SDC タスク CodePlex 上のタスク。
さらにお楽しみいただくために、 CodePlex の MSBuild 拡張パック, 、これには Twitter タスクが含まれます。
他のヒント
私のアドバイスはその逆です。MSBuild は疫病のように避けてください。NANT は、自動テストの実行、複数の実稼働環境へのデプロイ、エントリー環境用のクルーズコントロールとの統合、ソース管理との統合を行うためのビルドのセットアップがはるかに簡単です。NANT でそのまま実行できるようにするために、TFS/MSBuild (TFSDeployer、カスタム PowerShell スクリプトなどの使用) で非常に苦労しました。時間を無駄にしないでください。
MSBuild を使用する最も説得力のある理由 (少なくとも .NET 3.5 以降) は、ビルド エンジンが同時にビルドできることです。
これは、複数のコア/プロセッサーがある場合、ビルドの速度が大幅に向上することを意味します。
3.5 より前の MSBuild は並列ビルドを実行しませんでした。
MSBuild と Nant はかなり似ていると思います。これらのいずれかを使用している場合、選択した製品に欠けている魅力的な機能がない限り、通常はそれらを切り替えることはありません。
私は個人的に新しいプロジェクトには MSBuild を使用しますが、使用する距離は人によって異なる場合があります。
お役に立てば幸いです!
編集: @ChanChan - @Jon は、Nant は .NET 3.5 アプリケーションを構築しないと述べています。これは、変更するか、少なくとも並行して使用する十分な理由になる可能性があります。私は MSBuild に移行してきたので、どちらのテクノロジに関するその他の画期的な点についても強調できるほどの知識はおそらくありません。
編集: Nant は現在、.NET 3.5 アプリケーションを構築しているようです。
NAnt はより長く存在しており、かなり成熟した製品であり、IMO よりも使いやすいです。Mono だけでなく .NET や Silverlight でも実行できるアプリの構築に興味がある場合は、活用できるコミュニティのノウハウがたくさんあり、クロスプラットフォームでもあります。そのまま使用すると、MSBuild よりもはるかに多くの機能を実行できます。そうそう、NAnt から MSBuild を呼び出すこともできます (OK、NAntContrib から) :-)
マイナス面としては、NAnt とその姉妹プロジェクトである NAntContrib が停滞しているようで、最新のアップデートは 2007 年末でした。
MSBuild の主な利点は、.NET Framework に同梱されているため、インストールする製品が 1 つ少ないことです。そして、より活発な開発が進行中です(ただし、場所によっては古い NAnt に追いつく必要があります)。
個人的には、その構文を理解するのは少し難しいと思いますが、継続的に ti に触れることで物事が容易になると確信しています。
結論?既存の NAnt スクリプトを使用している場合は、移植に手間をかける価値はなく、そのまま使用してください。新しいプロジェクトを開始していて、冒険心があれば、MSBuild を試してみてください。
また、nant から msbuild に切り替えました。ビルドがかなり標準的なものであれば、セットアップにそれほど問題はありませんが、特定のビルド タスクがたくさんある場合は、msbuild のカスタム タスクがはるかに少ないため、カスタムの ms ビルド タスクを作成する必要があります。
妥当なビルド結果を表示したい場合は、カスタム ロガーなどをいじる必要があります。チーム全体の構築はナントほど熟していません。
しかし、本当の利点は、TFS ソース管理およびレポート サービスとの統合です。TFS をソース管理システムとして使用していない場合は、それだけの価値はありません。
- (少なくとも) よほど説得力のある理由がない限り、切り替えないでください。
- NAnt はオープン ソースであり、オープン ソースでなければビルド システムをカスタマイズできませんが、MSBuild はそうではありません。
- NAnt は MSBuild を簡単に実行できますが、その逆はわかりません。
- VS2005 以降を使用している場合、MSBuild スクリプトはすでに作成されています (プロジェクト ファイル は MSBuild ファイル。)
- NAnt を使用し、VS を使用してプロジェクト ファイル、設定、構成を編集する場合は、VS プロジェクト ファイルから NAnt ファイルを更新するコンバータ/同期ツールを作成する必要があります。
@ブラッド・リーチ
私は通常、不足している魅力的な機能がない限り、それらを切り替えることはありません
msbuild を使用する説得力のある理由は何ですか?短所はありますか?
これまでのところ、あなたの答えから「いいえ、気にしないでください」というかなり良い答えが得られています。
機能も使いやすさも比較的似ていると思います。C# ベースであるというだけで、msbuild は nants よりも扱いやすいと思いますが、それが乗り換える説得力のある理由ではありません。
ナントがあなたのためにしていないことは何ですか?それとも、見逃している素晴らしい機能があることを期待していますか?:)
C# の非常に優れた点の 1 つは、.net フレームワークがあれば、msbuild を実行するために必要なものがすべて揃っていることです。これは、大規模なチームやプロジェクトに取り組んでいて、人材やハードウェアの入れ替わりがある場合に最適です。
個人的には両方よりも SCons の方が好きです:)
私が今でも自動ビルドに msbuild ではなく nAnt を使用している主な理由は、ビルドをより細かく制御できるためです。msbuild は csproj のビルド ファイルを使用しているため、そのプロジェクト内のすべてのソースが 1 つのアセンブリにコンパイルされます。そのため、ロジックを分離している大規模なプロジェクトのソリューションに多くのプロジェクトが含まれるようになります。nant を使用すると、必要なものを 1 つのプロジェクトから複数のアセンブリにコンパイルできるようにビルドを調整できます。
私はこのルートが気に入っています。これにより、ソリューション内に多くのプロジェクト ファイルが必要なくなるからです。レイヤーを分割するフォルダーを含む 1 つのプロジェクトを作成し、nant を使用して各レイヤーを独自のアセンブリに構築できます。
ただし、WPF アプリケーションのビルドなど、一部のビルド タスクでは、nant と msbuild の両方を組み合わせて使用します。nat 内で msbuild ターゲットを使用して WPF アプリケーションをコンパイルする方がはるかに簡単です。
これを終えて、私の答えの要点は、私はこれらを並べて使用するのが好きなのですが、この構成で msbuild を使用する場合、通常は直接コンパイルするためであり、ファイルをディレクトリにコピーしたり、ファイルを生成したりするなどのビルド自動化タスクは実行しません。たとえば、ヘルプ ドキュメントを参照したり、単体テストを実行したりできます。
実は私もまだこの疑問を自分で解決しようとしているところですが、MSBuild には大きなボーナスが 1 つあります。msbuild.exe を直接呼び出して、ローカルの継続的統合に同じビルド ファイルを使用すると同時に、同じビルド ファイル (プロパティ/設定は異なる可能性が高いですが) で VSTS のサーバー側の継続的統合を使用することもできます。
つまりTeamCity の MSBuild スクリプト、VSTS のサポートと比較して のみ MSBuild スクリプトをサポートしています。私は過去に MSBuild から NAnt を実行することでこの問題をハッキングしたことがあります。他の人がこのやり方を勧めたり、その逆を勧めたりしているのを見てきましたが、私にとっては面倒に思えるので、避けられるものであればやらないようにしています。したがって、「完全な Microsoft スタック」 (VSTS および TFS) を使用している場合は、MSBuild スクリプトをそのまま使用することをお勧めします。
ナント すぐに使える機能がさらに豊富ですが、 MSBuild 基本構造 (アイテム メタデータ ロック) がはるかに優れており、再利用可能な MSBuild スクリプトの構築がはるかに簡単になります。
MSBuild を理解するには時間がかかりますが、一度理解できると非常に便利です。
学習教材:
- Microsoft ビルド エンジン内:MSBuild と Team Foundation ビルドの使用
サイード・イブラヒム・ハシミ著 (2009 年 1 月) - .NET アプリケーションの展開:MSBuild と ClickOnce の学習 (Sayed 著)
by Y.ハシミ (2008年9月)
切り替える理由が見当たりません。MsBuild 自体は、使用しているフレームワークにユーザーをロックします。NAnt を使用する場合は、多くのフレームワークにわたって NAnt を使用し、msbuild にシェルアウトして実際に構築タスクを実行できます。
私はこの点で NAnt のファンです。なぜなら、NAnt はフレームワークから少し切り離してくれるからです。
私は自動ビルドに規則を組み込むフレームワークを作成し、NAnt 上に構築しました。これは UppercuT と呼ばれるもので、非常に使いやすいビルド フレームワークです。
自動ビルドは、ほとんどのプロジェクトで (1) ソリューション名、(2) ソース管理パス、(3) 会社名だけで簡単に実行できます。
http://code.google.com/p/uppercut/
ここにいくつかの良い説明があります: アッパーカット
MSBuild は Visual Studio と統合されているため、プログラマーはビルド システムを使用する際の負担が軽減されます。これは主に、「ソリューションのビルド」を行うだけですべてが機能するのに対し、カスタム ビルド ステップなどを使用する必要があるか、さらに悪いことに開発者に何らかの外部スクリプトを起動してビルドを強制する必要があるという点にあります。
現在、私は NAnt よりも MSBuild の方がシンプルなので、主に MSBuild を好む傾向があります。確かに、NAnt にはより多くの機能があり、より強力ですが、すぐに手に負えなくなる可能性があります。あなたとあなたのビルド エンジニアが NAnt スクリプトをシンプルに保つ規律を持っていれば、大丈夫です。しかし、私はあまりにも多くの NAnt ベースのシステムが、何をしているのか誰も理解できないところまで行き着くのを見てきました。また、古き良き printf と同等のことを行う以外に実際にデバッグする方法はありません。if/else ステートメントや for ループを使い始めた瞬間から、私見ですが、臭いが始まります。
一方、MSBuild はメタデータに基づいた強固な基盤と、それほど冗長ではない構文を備えています。そのシンプルさ(または機能の欠如...)見方にもよりますが) XML マークアップでロジックを記述するのではなく、新しいタスクを介して .NET コードでロジックを記述する必要があります。これにより再利用性が促進され、何よりも実際のデバッガでビルド システムを実際にデバッグできるようになります。
MSBuild の唯一の問題は、頻繁に発生するバグ (特に最初のバージョン) または不明瞭な (文書化されているものの) 動作です。そして、Microsoft とのつながりが本当に気になるのであれば。
NANT から MSBuild に切り替えました。プロジェクトは .Net 4.0 で実行されています。
ナントでの私の経験は良かったです。プロジェクトはある意味死んでしまいました。そして .Net 4.0 が登場すると、ビルド プロセスを再評価する時期が来ました。
Nant が最後にリリースされて以来、MSBuild は進歩してきました。現時点では、MSBuild が最適です。使いやすく、多くの拡張機能があります。Nant のスクリプトを 1 日半で書き直しました。MSBuild スクリプトのサイズは、Nant スクリプトの 1/3 です。
Nant スクリプトの作業の多くは、さまざまな環境をセットアップすることでした。MsBuild/.Net 4.0 にはこれが組み込まれています。
MSBuildを使用しています 並んで Nant は、Nant の現在のバージョンではまだ .NET 3.5 アプリケーションをコンパイルできないためです (.NET 2.0 が最初に登場したときも同様でした)。
msbuild を使用する唯一の理由は、クルーズ コントロールのような自動ビルド サーバーを使用したい場合です。切り替えるつもりがないなら、放っておいてもいいと思います。
私はNantを使っていますが、とても気に入っています。私は MSBuild を使用していましたが、次の理由からそれを嫌いました。
Microsoft は独自のビルド手順に従うことを強制しますが、これは彼らの業務に固有のものであるため、少なくとも私はそれを機能させることができませんでした (NET1.1 をコンパイルしなければならなかったので、Nant と MSbuild を混合する必要がありました)。独自の MSBuild ファイルを作成できることは知っていますが、理解して管理するのは複雑だと思いました。
ファイル操作を行うためのItemTypeは、理解するのが非常に困難です。Nant にまったく同じことを、はるかに簡単かつ直接的に実行させることができます (私は、ItemType リストを作成してから、ファイル操作に渡す必要がありました)。
MsBuild では独自のタスク DLL を作成する必要がありますが、Nant ではこれを行うことも、スクリプト内に C# コードを埋め込むこともできるため、プロジェクト全体をビルドするだけで進めることがはるかに簡単になります。
Nant は Net1.1 で動作しますが、MsBuild は動作しません。
Nant をインストールするには、解凍して自分のリポジトリ内に配置して実行することもできます。MsBuild をインストールするのは、Visual Studio などの多くのものに依存するため、非常に困難です。(もしかしたら私が間違っているかもしれませんが、それが真実のようです)。
まあ、これらは私の意見です...