在msbuild中获取输出的正确方法是什么?

时间:2016-09-27 14:37:13

标签: msbuild xbuild

在msbuild中从CallTarget获取输出的正确方法是什么?我尝试过这样的事情(请参阅CoreOutput中的EnumsOutputCallTarget):

<Target Name="TerrainEngine" Outputs="$(GeneratedAssembly)">

  <Message Text="Core0: $(CoreOutput)" />
  <Message Text="Enum0: $(EnumsOutput)" />

  <CallTarget Targets="Core" >
    <Output TaskParameter="TargetOutputs" PropertyName="CoreOutput"/>
  </CallTarget>

  <Message Text="Core1: $(CoreOutput)" />
  <Message Text="Enum1: $(EnumsOutput)" />

  <CallTarget Targets="Enums" >
    <Output TaskParameter="TargetOutputs" PropertyName="EnumsOutput"/>
  </CallTarget>

  <Message Text="Core2: $(CoreOutput)" />
  <Message Text="Enum2: $(EnumsOutput)" />

  <ItemGroup>
    <RefsList Include="$(CoreOutput)" />
    <RefsList Include="$(EnumsOutput)" />
  </ItemGroup>

  <PropertyGroup>
    <Refs>@(RefsList)</Refs>
  </PropertyGroup>

  <Message Text="ModuleDir!!!!: $(Refs)" />

  <MSBuild Projects="$(MSBuildProjectFullPath)"
      Targets="CreateModule"
      Properties="ModuleDir=BigMaps;
      RefAssemblies=$(UnityLibsPath)/UnityEngine.dll;
      RefModules=$Refs">
        <Output TaskParameter="TargetOutputs" PropertyName="GeneratedAssembly"/>
  </MSBuild>
</Target>

由于某种原因,第二个CallTarget使两个变量无效。我得到这样的输出:

Core0:
Enum0:
Core1: modules/Core.mobule
Enum1:
Core2: 
Enum2: modules/Enums.mobule

据我所知,这是由于msbuild逻辑中的一些错误(这是我在网上阅读时的印象)。

你能告诉我如何解决它吗?

我读过我应该使用DependsOnTargets代替,但我无法弄清楚如何从这些中获取输出。这可能吗?

0 个答案:

没有答案