0

これら 2 つのMSBuildファイルについて考えてみましょう。最初build-script.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- build-script.xml -->
<Project
    ToolsVersion="4.0"
    DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <OutputName>OutputName</OutputName>
    </PropertyGroup>

    <Import Project="build-script-to-import.xml"/>
</Project>

そしてbuild-script-to-import.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- build-script-to-import.xml -->
<Project
    ToolsVersion="4.0"
    DefaultTargets="Build"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <OutputPath>Path\$(OutputName)</OutputPath>
    </PropertyGroup>

    <Target Name="Build">
        <Message Text="$(OutputPath)" />
    </Target>
</Project>

これら 2 つのファイルは、共通のターゲット ファイル ( ) を参照する非常に単純化された C# プロジェクト ファイル ( ) を表します。これは、ファイルを変更するオプションではないことを意味します。問題は、が計算されることです。ファイルをインポートする前に、この計算値に設定する必要があります。どうすればこれを達成できるか知っていますか?build-script.xmlbuild-script-to-import.xmlbuild-script-to-import.xmlOutputNamebuild-script-to-import.xml


GetAssemblyIdentity注 1: 計算された値は、実際にはMSBuild taskを使用してアセンブリ ファイルから取得できるアセンブリ バージョンです。私が見ている問題は、インポートが発生する前にターゲットを呼び出さない可能性があることです。MSBuild タスクOutputNameを使用してプロパティの値を設定したいと思います。GetAssemblyIdentity

注 2: ビルドは Visual Studio によってトリガーされるため、バッチ ファイルを使用してプロパティをコマンド ライン引数として MSBuild に送信することはできません。

4

2 に答える 2

0

$(OutputPath) の宣言を「ビルド」ターゲット内に移動します。「計算された」プロパティを使用する唯一の方法は、それらをターゲット内で評価することです。グローバルに宣言された「静的」プロパティは、ターゲットが実行される前に常に評価されます。おそらく、ターゲットを実行して $(OutputName) の値を計算する必要があります。名前計算ターゲットが「ビルド」ターゲットの前に実行されていることを確認してください。

于 2012-08-14T19:09:20.403 に答える
0

インポートされたプロジェクトからの対応するターゲットを変更できる場合DependsOnTargets

<Target Name="Build" DependsOnTargets="@(BuildDependsOn)" />

アイテムを変更して、必要なプロパティを準備するターゲットを追加できます。

それが不可能な場合は、ラッパーを記述して、基礎となるターゲット (ビルド/リビルド/クリーン) を自分で (インポートせずに) 呼び出すことができますbuild-script-to-import.xml

build-script.xml

 <Target Name="Build" DependsOn="PrepareProperties">
      <MSBuild Projects="build-script-to-import.xml"  
               Targets="Build"            
               Properties="OutputName=$(OutputName);$(OtherProperties)"/>
 </Target>

提案

動的に変更するという要件に応じて、OutputNameより単純なソリューションが存在する可能性があります。それをしないだけです。独自のカスタム ビルド ステップを記述して、固定出力ディレクトリから、ルールを使用して計算された宛先にコピーする方が簡単です。

たとえば、パスが固定されたlatestという名前のディレクトリと、製品の各バージョンのディレクトリがある場合の練習を好みます。誰もがそのフォルダーから最新バージョンを取得できます。

于 2012-08-14T22:50:21.203 に答える