【问题标题】:Reading msbuild syntax阅读 msbuild 语法
【发布时间】:2015-06-10 11:27:34
【问题描述】:

我遇到了我不理解的 msbuild 语法。以下sn-p来自another question about making a custom msbuild task

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

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

这种用于替换构建任务属性的小语言(@s、$s、%s、-&gt; 等)是什么?

【问题讨论】:

  • documentation I have found 表明这种小语言比我以前见过的要多得多。这些东西简明扼要地记录在哪里?
  • Condition syntax 是相关的,至少对于字符串而言,并且有文档。

标签: c# msbuild msbuild-task


【解决方案1】:

我不确定这些小语言是否有一个特殊的名字。据我所知,这些是为提取或显示项目或项目可能包含的元数据的值而定义的方法。

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

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

请参阅检查项目类型值中的部分。

【讨论】:

  • 链接文档正是我希望找到的简明文档。
  • 我很高兴能帮上忙 :)
【解决方案2】:

这种特定的语法称为transform

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

语法没有明确记录。 -&gt; 之前的部分是 item list,类似于 @ 通常引用的部分。在示例@(dbml-&gt;...) 中,它正在转换dbml 项目列表。 -&gt; 之后的部分是新文件名的表达式。它可以使用% 符号引用任何item metadata。在示例中,它使用$(IntermediateOutputPath) 属性和%(Filename) well-known item metadata 构造一个字符串。

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

MetaData        Example     
%(FullPath)     C:\MyProject\Source\Program.cs
%(RootDir)      C:\
%(Directory)       MyProject\Source\
%(Filename)                         Program
%(Extension)                               .cs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-18
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多