MSBuild传递参数给CallTarget
我试图在我的MSBuild文件中创build一个可重用的目标,所以我可以用不同的参数多次调用它。
我有这样的骨架:
<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>
但我不能解决如何让parameter passing到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脚本的全path,以防您不想将“部署”发送到其他文件。
希望这可以帮助!
你可以用一个目标对一个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生成的项目文件中find这个模式。
在MSBuild中可能有更好的方法,但在Ant中,我将使用全局属性将信息从一个任务传送到另一个任务。 这是一个糟糕的解决scheme,但当时我没有看到更好的办法。 你应该可以在MSBuild中做到这一点,但要记住,你将需要使用CreateProperty
任务dynamic分配一个属性。
另一方面,在C#(或VB或其他)中实现任务相当简单。 也许这对你来说是一个更好的解决scheme。
<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"/>
- allowDefinition ='MachineToApplication'msbuild错误
- 使用msbuild指定解决scheme的项目文件
- 如何将IIS 7 Web部署与MSBuild(TeamCity)集成
- 将所有警告视为错误
- TFS构build服务器 – CSC:致命错误CS2008:未指定input
- 在Visual Studio中显示构build时间?
- 复制到输出目录复制文件夹结构,但只想复制文件
- 卡住不活动的msbuild.exe进程,lockingStylecop.dll,Nuget AccessViolationException和CIbuild立相互冲突的奥秘
- 如何在不安装Visual Studio的情况下构build.NET 4.6 Framework应用程序?