문제

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>

그러나 일반적인 시나리오는 다른 매개 변수 (즉, 여러 웹 사이트를 배포)로 대상을 여러 번 호출하는 것입니다. 이 경우 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 스크립트의 전체 경부입니다.

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

다른 팁

당신은 'foreach'를 할 수 있습니다 ItemGroup 목표를 사용하면 선언적 방식으로 만해야합니다. 코드 예제와 같이 항목에 추가 메타 데이터가있을 수도 있습니다.

<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 재산을 동적으로 할당하는 작업.

반면에 C# (또는 VB 또는 무엇이든)에서 작업을 구현하는 것은 매우 쉽습니다. 어쩌면 그것은 당신에게 더 나은 솔루션일지도 모릅니다.

    <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"/>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top