首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Msbuild-包含条件的'DependsOnTargets‘

Msbuild-包含条件的'DependsOnTargets‘
EN

Stack Overflow用户
提问于 2016-06-01 22:50:21
回答 1查看 588关注 0票数 0

我尝试在Target标记上设置一个条件,但结果是出现错误:target has a reference to item metadata. References to item metadata are not allowed in target conditions unless they are part of an item transform.

所以我找到了这个工作:How to add item transform to VS2012 .proj msbuild file,并尝试实现它,但我不能找出我做错了什么,因为它没有像预期的那样工作。

代码语言:javascript
复制
<CallTarget Targets="CopyOldWebConfigJs" /> 

<Target Name="CopyOldWebConfigJs" 
            Inputs="@(ContentFiltered)" 
            Outputs="%(Identity).Dummy" 
            DependsOnTargets="webConfigJsCase">

        <Message Text="web.config.js Case" />
</Target>

    <!-- New target to pre-filter list -->
<Target Name="webConfigJsCase"
        Inputs="@(FileToPublish)"
        Outputs="%(Identity).Dummy">
    <ItemGroup>
      <ContentFiltered Condition="$([System.Text.RegularExpressions.Regex]::IsMatch('%(FileToPublish.Filename)%(FileToPublish.Extension)', 'web.config.js'))" />
    </ItemGroup>
</Target>

我以为Inputs="@(ContentFiltered)"会包含DependsOnTargets="webConfigJsCase"找到的代码行。但是当我运行它时,我得到了这样的消息:Skipping target "CopyOldWebConfigJs" because it has no inputs.

我知道的事实是,正则表达式是有效的,它确实找到了一个等于web.config.js的filename_ext,所以它返回了True,我做错了什么或理解错了什么?

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 06:40:45

<ItemGroup><Item/></ItemGroup>中,不会对Item项进行任何更改,因为未指定任何操作。如果要向项中添加条目,则必须指定Include=""

documentation描述了<ItemGroup/>中的item元素的各种属性。请注意,在MSBuild文件的顶层,<Project/>元素的正下方,您将使用属性IncludeExclude,而在<Target/>中,您将使用属性IncludeRemove。根本不包含任何属性是毫无意义的,而且-据我所知-与简单地删除整行没有什么不同。我很惊讶MSBuild没有抛出错误或警告,这几乎可以肯定是一个错误,而不是故意的。

<Target Name="webConfigJsCase"/>上的InputsOutputs属性是不必要的。事实上,它们会使MSBuild在不必要的情况下循环到目标上,从而降低速度。您可以像这样在<Item/>中进行过滤:

代码语言:javascript
复制
<Target Name="webConfigJsCase">
  <ItemGroup>
    <ContentFiltered Condition="'%(FileToPublish.Filename)%(FileToPublish.Extension)' == 'web.config.js'" Include="@(FileToPublish)" />
  </ItemGroup>
</Target>

此外,我假设您希望正则表达式匹配web.config.js,但不匹配webaconfigbjs。这里不需要使用像正则表达式这样的高级功能,因为MSBuild’s built-in condition operators已经支持简单的字符串比较。如果修复了上述条件,则会更具可读性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37572074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档