阅读msbuild语法

时间:2015-06-10 02:48:57

标签: c# msbuild msbuild-task

我遇到了我不理解的msbuild语法。以下代码段来自another question about making a custom msbuild task

<GenerateDesignerDC
  InputFiles="@(dbml)"
  OutputFiles="@(dbml->'$(IntermediateOutputPath)%(FileName).designer.cs')">
    ...

@(dbml->'$(IntermediateOutputPath)%(FileName).designer.cs')是什么意思? @符号通常引用ItemGroup中的文件; ->内的@(...)箭头是什么意思?

这种小语言(使用@$%->等)用于替换构建任务的属性是什么?叫?

2 个答案:

答案 0 :(得分:3)

我不确定这些小语言是否有特殊名称。据我所知,这些是定义的方式,用于提取或显示项目可能包含的项目或元数据的值。

例如:@符号用于获取任何ItemType的值。 对于项目列表转换,使用@(SourceFiles -> '%(Filename).obj')

查看此链接以获取更多信息 https://msdn.microsoft.com/en-us/library/dd393573.aspx

请参阅“检查项目类型值”部分。

答案 1 :(得分:2)

此特定语法称为transform

  

转换是一个项目列表与另一个项目列表的一对一转换。除了使项目能够转换项目列表之外,转换还使目标能够识别其输入和输出之间的直接映射。

语法未明确记录。 ->之前的部分与@类似,通常由@(dbml->...)引用。在示例dbml中,它正在转换->项目列表。 %之后的部分是新文件名的表达式。它可以引用任何带有$(IntermediateOutputPath)符号的item list。在示例中,它构建了一个包含%(Filename)属性和MetaData Example %(FullPath) C:\MyProject\Source\Program.cs %(RootDir) C:\ %(Directory) MyProject\Source\ %(Filename) Program %(Extension) .cs item metadata的字符串。

众所周知的项目元数据应该可用于任何项目,并且最明显包括项目的路径

if (container[0].offsetHeight + container[0].scrollTop >= container[0].scrollHeight) {
            if(scope.var<scope.arrays.length)
            scope.display=[];
            var nextvar =++counter;
            var increment=counter+1
            console.log("nextvar:"+nextvar+"increment:"+increment)
            scope.display=scope.arrays[nextvar].concat(scope.arrays[increment]);
           console.log(scope.display)
          }