2009-05-10 10 views
8

今週はmsbuildに興味があります。非常に複雑なビルドスクリプトをたくさん用意しています。どれくらいのことができるのか私を驚かせてくれます。msbuildは、.NETプログラミングの隠された機能です。msbuildの隠し機能

質問に答えが必要なSOの慣習では、数日または1週間で、最も有用で最もクールな隠れた特徴を受け入れたものとしてマークします。便利なの

let bestAnswer suprise slick useful = (surprise + slick + 2*useful) 

定義:パッケージ(zipファイル)のウェブサイトとユーティリティ、CC.NET統合、打ち上げ試験(UT +セレン)は、データベースの構築:私は既存のMSBuildのスクリプトを更新しています。 VMWare仮想サーバーに展開する、連鎖ビルドする(すぐに速くビルドする、遅いテストをキューに入れる)あなたが外部ライブラリ(MSBuild community tasksのような)を参照する場合は、それを取得する方法を知っていいです。

私がすでに見つけたいくつかのmsbuildの驚き。

  • こんにちは、Messageのタスクとプロパティを使用しています。
  • 非常に複雑なサーバー製品のインストーラとしてmsbuildを使用します。 MSB community tasks管理されたIISサーバーのセットアップ。 WriteLinesToFileXmlUpdateタスクは、サーバー固有の構成ファイルを作成しました。 MSIで作業していれば、インストールのためにMSIより優れていることが分かります。
  • 初心者の場合:CSProjファイルとVbprojファイルはmsbuild "proj"ファイルと同じです。直接編集するには:csprojまたはvbprojをアンロードし、プロジェクトを右クリックして[編集]を選択します。これは、ビルド前のビルド/ビルド後のイベントを扱うよりも、より良く、より強力です。
  • MSBuildには、一般的な.NETインストールが付属しています。その他の高度なツールとは異なり、完全にクリーンなサーバー/デスクトップ上で使用できます。私はそれを書いた後、ここで

は、MSBuildのHello Worldの ですが、私はMSDN hello worldを見つけました。

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build;Test" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
     <Who>World</Who> 
    </PropertyGroup> 
    <Target Name="Hello"> 
    <Message Text="Hello, $(Who)" Importance="high" ></Message> 
    </Target> 
    <Target Name="Build" DependsOnTargets="Hello"/> 
    <Target Name="Test"/> 
</Project> 
+0

質問より多くの議論があるので、これはコミュニティ・ウィキであるべきですか? – Naaff

+0

OK。残りの「隠れた機能」のように見えます。コミュニティwikiです。 – Precipitous

答えて

5

MSBuildには数多くの便利な機能があります。私はあなたが別の内から1つのMSBuildファイルを参照することができ

再帰的なファイルの仕様

<Files Include="$(src)\**\*.cs" Exclude="$(src)\**\*test.cs" /> 

バッチ処理やアイテムのメタデータ

<ItemGroup> 
<F Include="SampleApplication.t"> 
    <Version>1</Version> 
</F> 
<F Include="SampleApplication2.t"> 
    <Version>1</Version> 
</F> 
<F Include="SampleApplication3.t"> 
    <Version>2</Version> 
</F> 
</ItemGroup> 
<Target Name="Build"> 
<Touch Files="%(F.FullPath)" AlwaysCreate="True" 
     Condition=" '%(F.Version)' > '1' "> 
<Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/> 
</Touch> 
<Message Text="Created files = @(CreatedFiles)"/> 
<Message Text="%(F.Identity) %(F.Version)"/> 
</Target> 

ターゲットレベルの依存関係の分析

<Target Name="Build" 
      Inputs="@(MyItems)" 
      Outputs="@(MyItems -> '$(MyItems)\%(filename).dll'"> 
+0

再帰的**は、フレームワーク(CF/Silverlight/.NET/etc)間でコードを共有するのに使うトリックです。非常に便利です。 –

0

が好きです。 NCover、SourceMonitor、Duploなどのすべてのターゲットは、共通のターゲットファイル内にあります。プロジェクトごとに、PropertyGroupおよびItemGroupセクションを含むmsbuildファイルを作成し、次に共通のターゲットにインクルードします。これにより、すべてのビルドが同じ一連の分析タスクを実行し、スクリプトを書く時間を節約できます。

2
  • 私は信じられないほど 有用であることがMSBuild Extensionパックを発見しました。ドキュメントは非常に整理され、必要な情報を簡単に見つけることができます。

  • 彼らはhere

  • Attrice私はビルドスクリプトで作業する必要がある場合、私は頻繁に使用する信じられないほどのツールを持って見つけることができますビルドファイルのためのインテリセンスを設定するセクションを、持っています。あなたがそれを試してみる価値があるのは、ビルドスクリプトを実行しているときに、ビルドスクリプトを実行している間にautoとwatch変数を使って、依存するタスクを表示するデバッガがあることです。 Microsoft Build Sidekick v2.3

  • SVNを静かに設定すると、ビルドプロセスの速度が大幅に向上したように感じられます。あなたのMSBuild.Community.Tasks.Subversion.SvnExportに、次の追加は、それぞれ、それはSVNから外れたすべてのファイルを記録せずにビルドを実行します

    引数=「 - 力-q」

3

は、すべての使用可能なCPUコアの使用を有効にするには、/Mコマンドラインパラメータを使用します。

4

これは実際には隠された機能ではありませんが、わたしは理解するとbatchingが非常に強力だと思います。

あなたはで私の関連ブログのエントリを読むことができます詳細については

サイード・イブラヒムHashimi

マイ・ブック:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

関連する問題