【问题标题】:Why is MsBuild's ItemGroup->EndWith not working for '.exe'?为什么 MsBuild 的 ItemGroup->EndWith 不适用于“.exe”?
【发布时间】:2016-02-23 09:17:12
【问题描述】:

我正在尝试创建一个包含 dll 和 exe 的项目组,但过滤掉任何 msi 和 test.dll。

以下 sn-p 不包括 UniqueAssemblies 项目组中的 .exe。它确实包含所有 dll 并按预期删除了 msi。 UniqueCompiledFiles 确实包含所有预期的输出文件(.test.dll、.dll、.msi、.exe)

<Target Name="CustomCompile">
<MSBuild
  BuildInParallel="true"
  Projects="@(ProjectFiles)"
  Properties="$(ProjectProperties)"
>
  <Output TaskParameter="TargetOutputs" ItemName="CompiledFiles" />
</MSBuild>
<RemoveDuplicates Inputs="@(CompiledFiles)">
  <Output TaskParameter="Filtered" ItemName="UniqueCompiledFiles" />
</RemoveDuplicates>

<ItemGroup>
  <UniqueAssemblies
    Include="%(UniqueCompiledFiles.Identity)"
    Condition=" '@(UniqueCompiledFiles->EndsWith('.dll'))' == 'true' " />
  <UniqueAssemblies
    Include="%(UniqueCompiledFiles.Identity)"
    Condition=" '@(UniqueCompiledFiles->EndsWith('.exe'))' == 'true' " />
</ItemGroup>

我还找到了正确过滤 .exe 的解决方法。

<ItemGroup>
  <UniqueAssemblies2
      Include="%(UniqueCompiledFiles.Identity)"
      Condition=" $([System.String]::new('%(UniqueCompiledFiles.Identity)').EndsWith('.exe')) " />
</ItemGroup>

找出可以删除以解决问题但实际上并不能回答问题的罪魁祸首。

<ItemGroup>
  <!-- Workaround for MSBuild defect: https://github.com/Microsoft/msbuild/issues/69 -->
  <UniqueCompiledFiles Include="Project\bin\release\Project.exe">
    <MSBuildSourceProjectFile>Project\Project.csproj</MSBuildSourceProjectFile>
    <Platform>x86</Platform>
  </UniqueCompiledFiles>
</ItemGroup>

为什么@(UniqueCompiledFiles-&gt;EndsWith('.exe')) 语法没有按预期工作?

【问题讨论】:

  • 一个不同之处是第一个示例尝试嵌套单引号,而第二个示例则没有。尝试使用反引号引用:EndsWith(`.dll`)

标签: c# msbuild


【解决方案1】:

您正在尝试在项目(而不是属性)上使用 Property Function

您应该能够通过使用以下方法获得所需的结果:

<ItemGroup>
  <UniqueAssemblies2
    Include="%(UniqueCompiledFiles.Identity)"
    Condition=" '%(Extension)' == '.exe' " />
</ItemGroup>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-08
    • 2015-05-05
    • 2014-11-10
    • 2017-08-28
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多