MSBuild,我可以使用 UsingTask 的输出来执行 Copy 任务吗?

3
给定: 随Visual Studio 2019附带的MSBuild。 我试图获取代码任务的输出并将其用于复制任务。
MSBuild 内联任务参考 Go
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- This simple inline task displays "Hello, world!" -->
  <UsingTask
    TaskName="HelloWorld"
    TaskFactory="CodeTaskFactory"
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" >
    <ParameterGroup />
    <Task>
      <Reference Include="System.Xml"/>
      <Using Namespace="System"/>
      <Using Namespace="System.IO"/>
      <Code Type="Fragment" Language="cs">
<![CDATA[
// Display "Hello, world!"
Log.LogError("Hello, world!");
]]>
      </Code>
    </Task>
  </UsingTask>
</Project>

不知道如何将代码输出放到属性中,以便可以在CopyTask中使用它?
  <Target Name="AfterBuild">
    <HelloWorld /> 
    <Copy SourceFiles="" DestinationFiles="<HelloWorld />"
  </Target>

通常,MSBuild任务会公开用作输出参数的属性,然后您可以将这些属性传递给其他任务。这与日志记录是分开的。只是为了我理解您的问题,您想要在某个文件中显示文本“Hello, world!”吗? - Joe Sewell
是的,以某种方式在Copy任务的DestinationFiles属性中使用该字符串。基本上,我正在尝试在目标中指定一个动态文件夹名称。 - Rod
1
阅读有关任务的输入和输出参数的相关内容。您需要在任务内部将字符串“Hello, world!”分配给一个输出参数,然后在调用任务时需要使用MSBuild属性来消费该值,最后使用WriteLinesToFile任务(而不是复制现有文件系统上的文件)来完成操作。 - Joe Sewell
如何从代码元素中分配一个输出参数? - Rod
1个回答

3

感谢@Joe Sewell在原始帖中的评论。

找到答案:

文章链接前往

<UsingTask TaskName="Adder" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
  <ParameterGroup>
    <A ParameterType="System.Int32" Required="true" />
    <B ParameterType="System.Int32" Required="true" />
    <C ParameterType="System.Int32" Output="true" />
  </ParameterGroup>
  <Task>
    <Code Type="Fragment" Language="cs">
      C = A + B;
    </Code>
  </Task>
</UsingTask>
<Target Name="TestBuild">
  <Adder A="4" B="5">
    <Output PropertyName="Sum" TaskParameter="C" />
  </Adder>
  <Message Text="The sum is $(Sum)" Importance="High" />
</Target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接