我有以下简单任务:
<Exec Command=" icacls "$( [System.IO.Path]::Combine( $(_tempPublishUrl), Logs ))" /grant Users:(CI)(OI)M /T " ContinueOnError="true" />
<Exec Command=" icacls "$( [System.IO.Path]::Combine( $(_tempPublishUrl), Logs ))" /grant IIS_IUSRS:(CI)(OI)M /T " ContinueOnError="true" />
<Exec Command=" icacls "$( [System.IO.Path]::Combine( $(_tempPublishUrl), ReportResults ))" /grant Users:(CI)(OI)M /T " ContinueOnError="true" />
<Exec Command=" icacls "$( [System.IO.Path]::Combine( $(_tempPublishUrl), ReportResults ))" /grant IIS_IUSRS:(CI)(OI)M /T " ContinueOnError="true" />
<Exec Command=" icacls "$( [System.IO.Path]::Combine( $(_tempPublishUrl), ReportTemplates ))" /grant Users:(CI)(OI)M /T " ContinueOnError="true" />
<Exec Command=" icacls "$( [System.IO.Path]::Combine( $(_tempPublishUrl), ReportTemplates ))" /grant IIS_IUSRS:(CI)(OI)M /T " ContinueOnError="true" />
我想创建一个可重用的任务,这些任务会将这些exec-task的参数“ _tempPublishUrl”参数化,因为我想在msbuild脚本的不同部分中重用它们(也就是消除代码重复)。我知道我可以像这样创建简单的C#任务:
<UsingTask
TaskName="RenameDirectory"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"
>
<ParameterGroup>
<PathToDirToRename ParameterType="System.String" Required="true" />
<PathToNewDirectoryName ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Code Type="Fragment" Language="cs">
<![CDATA[
System.IO.Directory.Move(PathToDirToRename, PathToNewDirectoryName);
]]>
</Code>
</Task>
</UsingTask>
但是如何使用
答案 0 :(得分:0)
据我了解,您可以将Exec与参数组合成Target并使用CallTarget。
答案 1 :(得分:0)
我想创建一个可重用的任务,这些任务将这些exec-task的参数“ _tempPublishUrl”参数化,因为我想在msbuild脚本的不同部分中重复使用它们(又称消除代码重复)。
作为一种解决方法,您可以在_tempPublishUrl
/ .targets
文件中定义.props
,例如:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<_tempPublishUrl>SomeValue1</_tempPublishUrl>
</PropertyGroup>
</Project>
然后,当您在msbuild脚本的不同部分中重新使用它们时,可以导入此.targets
/ .props
文件:
<Import Project="..\Path\xxxx.targets" />
即使您可以使用nuget来管理此文件,也无需手动导入此.targets
/ .props
文件,只需将nuget包添加到msbuild脚本的不同部分,请查看Creating native packages了解更多详细信息。
此外,您还可以在<UsingTask>
/ .targets
文件中添加.props
。在这种情况下,我们不需要重复<UsingTask>
代码,可以在导入.targets
/ .props
文件或安装nuget包后重新使用它。
希望这会有所帮助。
答案 2 :(得分:0)
就我的研究而言,获得所需效果的唯一方法是将所需功能提取到单独的.msbuild文件中,并在调用上述卫星.msbuild时使用任务的Properties =“ ...”属性文件。这种方法是不理想的,因为卫星.msbuild仍通过“ / p”开关在根.msbuild文件传递的全局属性中公开。但这足够接近理想,肯定比没有好。