所以我对脚本和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>
但它一直给我这个错误,我无法解决它。
错误:
我想我是以错误的方式构建命令。 :/
有人对此有任何线索吗?
提前致谢。 :)
答案 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。