我试图创建一个dll和exe的项目组,但过滤掉所有msi和test.dll。
以下代码段不包含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'))
语法无法正常工作?
答案 0 :(得分:0)
您尝试在项目(而不是属性)上使用Property Function。
您应该能够通过使用以下内容获得所需的结果:
<ItemGroup>
<UniqueAssemblies2
Include="%(UniqueCompiledFiles.Identity)"
Condition=" '%(Extension)' == '.exe' " />
</ItemGroup>