我遇到了我不理解的msbuild语法。以下代码段来自another question about making a custom msbuild task
<GenerateDesignerDC
InputFiles="@(dbml)"
OutputFiles="@(dbml->'$(IntermediateOutputPath)%(FileName).designer.cs')">
...
@(dbml->'$(IntermediateOutputPath)%(FileName).designer.cs')
是什么意思? @
符号通常引用ItemGroup
中的文件; ->
内的@(...)
箭头是什么意思?
这种小语言(使用@
,$
,%
,->
等)用于替换构建任务的属性是什么?叫?
答案 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)
}