2011-09-13 9 views
3

私たちのCIプロセスのためのMSBuildスクリプトを作成し、このスクリプトでは、私は解決策コンパイルするのMSBuildタスクを使用します。私はC#のプロジェクトファイルがMSBuild 4.0から、MSBuildタスクからC#プロジェクトファイルに展開するプロパティ名を渡す方法は?

  • のような出力パスを使用したい

    <PropertyGroup> 
        <MyOutPath>Output</MyOutPath> 
    </PropertyGroup> 
    
    <MSBuild 
        Projects="MySolution.sln" 
        Targets="Clean;Rebuild" 
        Properties="OutputPath=$(MyOutPath)\%24(AssemblyName)"> 
    </MSBuild> 
    

    をプロジェクトのプロジェクトMyAssemblyName1

  • 出力の\ MyAssemblyName2の出力の\ MyAssemblyName1 MyAssemblyName2

として、 semblyNameプロパティはC#プロジェクトファイルからのもので、プロジェクトをビルドするときにOutputPathプロパティに展開します。

今、%24(AssemblyName)はファイルシステム上でOutput \ $(AssemblyName)を作成していますが、これは私が望んでいないものです。

$(AssemblyName)を使用すると、親のMSBuildファイルでは何も展開されません。

ターゲットプロジェクトファイルの後でAssemblyNameプロパティの解決を延期する方法はありますか?

また、私はCIシステムからの影響を最小限に抑えたいので、.csprojファイルを変更したくありません。

答えて

2

Import elementを使用して.csprojプロジェクトファイルを直接MSBuildスクリプトにインポートできます。 1MSBuildEmitSolution環境変数を設定することにより、convert it to an MSBuild project file

<Import Project="MyProject.csproj" /> 
<Message Text="The assembly name is $(AssemblyName)" /> 

あなたは.slnソリューションファイルの内容をインポートする必要がある場合は、最初にあなたが持っているだろうと上のMSBuildを実行します。この方法であなたは直接AssemblyNameプロパティを参照することができソリューションファイル。私はいくつかのプロジェクトファイルを参照するソリューションを持っているし、すべてのプロジェクトファイルが事前に知られていない、まあ

<SetEnv Name="MSBuildEmitSolution" Value="1" /> 
<MSBuild Projects="MySolution.sln" Targets="Build" /> 
<Import Project="MySolution.sln.proj" /> 
+0

:これは前に述べたようにあなたは、あなたのスクリプトにインポートすることができMySolution.sln.projファイルを生成します。インポートはアイテムをサポートしていますか? –

+0

さらに、すべてのプロジェクトを必ずしも含むわけではないソリューションがあるので、正しいプロジェクトファイルを処理するためにslnファイルを解析する必要があります。 –

+0

MSBuild 4.0を使用している場合、[Import](http://msdn.microsoft.com/en-us/library/92x05xfs.aspx)要素は実際にワイルドカードをサポートしているので、 ' '特定のディレクトリ内のすべてのプロジェクトファイルをインポートします。 –

関連する問題