IT TIP

CallTarget에 매개 변수를 전달하는 MSBuild

itqueen 2020. 11. 24. 20:44
반응형

CallTarget에 매개 변수를 전달하는 MSBuild


다른 매개 변수를 사용하여 여러 번 호출 할 수 있도록 MSBuild 파일에서 재사용 가능한 대상을 만들려고합니다.

다음과 같은 골격이 있습니다.

<Target Name="Deploy">
    <!-- Deploy to a different location depending on parameters -->
</Target>

<Target Name="DoDeployments">
    <CallTarget Targets="Deploy">
        <!-- Somehow indicate I want to deploy to dev -->
    </CallTarget>

    <CallTarget Targets="Deploy">
        <!-- Somehow indicate I want to deploy to testing -->
    </CallTarget>
</Target>

그러나 매개 변수를으로 전달한 CallTarget다음 Target자체적 으로 전달하는 방법을 알아낼 수 없습니다 .


MSBuild 대상은 매개 변수를 수신하도록 설계되지 않았습니다. 대신 사용자가 정의한 속성을 사용합니다.

<PropertyGroup>
    <Environment>myValue</Environment>
</PropertyGroup>

<Target Name="Deploy">
    <!-- Use the Environment property -->
</Target>

그러나 일반적인 시나리오는 다른 매개 변수로 Target을 여러 번 호출하는 것입니다 (예 : 여러 웹 사이트 배포). 이 경우 MSBuild MSBuild작업을 사용 하고 매개 변수를 속성으로 보냅니다.

<Target Name="DoDeployments">
    <MSBuild Projects ="$(MSBuildProjectFullPath)"
             Properties="VDir=MyWebsite;Path=C:\MyWebsite;Environment=$(Environment)"
             Targets="Deploy" />

    <MSBuild Projects ="$(MSBuildProjectFullPath)"
             Properties="VDir=MyWebsite2;Path=C:\MyWebsite2;Environment=$(Environment)"
             Targets="Deploy" />
</Target>

$(MSBuildProjectFullPath) "배포"를 다른 파일로 보내지 않으려는 경우 현재 MSBuild 스크립트의 전체 경로입니다.

도움이 되었기를 바랍니다!


ItemGroup대상을 통해 'foreach' 할 수 있지만 선언적 방식으로 수행하면됩니다. 코드 예제와 같이 항목에 추가 메타 데이터를 포함 할 수도 있습니다.

<ItemGroup>
    <What Include="Dev">
        <How>With bugs</How>
    </What>
    <What Include="Test">
        <How>With tests</How>
    </What>
    <What Include="Chicken">
        <How>Deep fried</How>
    </What>
</ItemGroup>

<Target Name="Deploy">
    <Message Text="@(What), %(How)" />
</Target>

항목 그룹을 @(What)대상 내부 의 스칼라 값으로 사용하면 트릭 %(How)을 수행하고 foreach 항목의 메타 데이터 요소를 참조합니다.

이는 msbuild에서 작업을 수행하는 자연스러운 방법입니다. 예를 들어 Visual Studio로 생성 된 프로젝트 파일의 모든 곳에서이 패턴을 찾을 수 있습니다.


MSBuild에서이 작업을 수행하는 더 좋은 방법이있을 수 있지만 Ant에서는 전역 속성을 사용하여 한 작업에서 다음 작업으로 정보를 전달합니다. 형편없는 해결책 이었지만 당시에는 더 나은 방법을 찾지 못했습니다. MSBuild에서이 작업을 수행 할 수 있어야하지만이 CreateProperty작업을 사용하여 속성을 동적으로 할당해야합니다.

On the other hand, it's pretty easy to implement tasks in C# (or VB or whatever). Maybe that's a better solution for you.


    <CreateProperty
        Value="file1">
        <Output
            TaskParameter="Value"
            PropertyName="filename" />
    </CreateProperty>
    <CallTarget Targets="Deploy"/>
    <Message Text="$(filename)"/>
    <CreateProperty
        Value="file2">
        <Output
            TaskParameter="Value"
            PropertyName="filename" />
    </CreateProperty>
    <Message Text="$(filename)"/>   
    <CallTarget Targets="Deploy"/>

참고URL : https://stackoverflow.com/questions/1502410/msbuild-passing-parameters-to-calltarget

반응형