如何使用Targets在XML文件中复制特定的命令行?

时间:2016-07-28 15:28:43

标签: xml scripting msbuild task targets

所以我对脚本和XMl都不熟悉,但我正试图让我的头脑充满活力。

我正在开发一个项目,我必须使用任务和目标将某些命令从脚本复制到XML,然后在TFS 2015中使用MSBuild运行它。

我一直无法尝试复制一个“调用”.exe文件,并将另一个文件作为参数进行转换,然后将其输出到特定目录。我们正在使用环境变量,所以它是这样的:

"%CONVERTER_TOOL%" "%FILE_TO_CONVERT%" "OUTPUT_DIR"

这是命令在Generate.cmd文件中的编写方式。

我是在.csproj上做的,列出的变量已经由我在排队MSBuild时首先调用的配置文件设置。

<ItemGroup>
    <Converter Include="$(CONVERTER_TOOL)"/>
</ItemGroup>
<ItemGroup>
    <FileToConvert Converte Include="$(FILE_TO_CONVERT)"/>
</ItemGroup>
<ItemGroup>
    <OutDir Include="$(OUTPUT_DIR)"/>
</ItemGroup>
<Target Name="">
    <Exec Command="@(Converter.Identity) @(FileToConvert.Identity)
    @(OutDir)"/>
 </Target>

但它一直给我这个错误,我无法解决它。

错误:

@(FileToConvert.Identity)此时出乎意料。

我想我是以错误的方式构建命令。 :/

有人对此有任何线索吗?

提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你有单个转换器工具(由环境变量引用)和单个输出目录。 然后,您可能有许多要转换的文件。 在您的情况下,您尝试对转换器和文件进行批处理,这不是必需的。 相反,您需要将PropertyGroup用于具有单个值的项目(如Converter):

<PropertyGroup>
    <Converter>$(CONVERTER_TOOL)</Converter>
    <OutDir>$(OUTPUT_DIR)</OutDir>
</PropertyGroup>
<ItemGroup>
     <FileToConvert Include="$(FILE_TO_CONVERT)"/>
</ItemGroup>
<Target Name="">
    <Exec Command="$(Converter) %(FileToConvert.Identity) $(OutDir)"/>
</Target>

这将调用$(转换器)工具与FileToConvert项目组中的文件一样多。

如果要一次为所有文件调用转换器(它们将被传递到按空格分割的命令行),请使用@(FileToConvert)命令中的Exec

如果您确定只有一个要转换的文件 - 请不要使用ItemGroup,请使用PropertyGroup和Converter和OutDir。