【发布时间】: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->EndsWith('.exe')) 语法没有按预期工作?
【问题讨论】:
-
一个不同之处是第一个示例尝试嵌套单引号,而第二个示例则没有。尝试使用反引号引用:
EndsWith(`.dll`)