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
'IT TIP' 카테고리의 다른 글
| Java ReentrantReadWriteLocks-안전하게 쓰기 잠금을 획득하는 방법은 무엇입니까? (0) | 2020.11.24 |
|---|---|
| boxing / unboxing과 type casting의 차이점은 무엇입니까? (0) | 2020.11.24 |
| 현재 브라우저 창이 닫힐 때 Chrome 개발자 도구가 닫히지 않도록하려면 어떻게하나요? (0) | 2020.11.24 |
| GCC의 std :: put_time 구현 상태? (0) | 2020.11.24 |
| 머티리얼 디자인 하위 호환성 (0) | 2020.11.24 |