使用通配符(例如
)从文件创建MSBuild项目时<ItemGroup>
<Scripts>$(ScriptsDirectory)\**\*.sql</Scripts>
</ItemGroup>
文件似乎始终按路径按字母顺序排序。
但是,这种排序顺序是否得到保证 - 我可以依赖它吗?
答案 0 :(得分:6)
是的,MSBuild将始终按路径按字母顺序排序,以确保可重复性。 (这在我的新书“MSBuild Trickery”中有所介绍)
答案 1 :(得分:0)
我需要根据实际文件名对文件的ItemGroup进行排序,而不是完整路径。所以我写了一个MSBuild任务来做到这一点,希望它有帮助...
答案 2 :(得分:0)
一段时间后,我遇到了oddity从Visual Studio 2008过渡到2010年,其中包含使用通配符创建的ItemGroup的排序。以下划线字符“_”开头的文件名从结果中的第一个变为最后一个。
当时我使用MSBuild Extension Pack解决了这个问题。这提供了一个TaskAction来显式排序ItemGroup。
E.g。
<!-- Sort an ItemGroup alphabetically -->
<MSBuild.ExtensionPack.Framework.MsBuildHelper TaskAction="Sort" InputItems1="@(MainDataFiles)">
<Output TaskParameter="OutputItems" ItemName="sorted"/>
</MSBuild.ExtensionPack.Framework.MsBuildHelper>
<Message Text="Sorted Items: %(sorted.Identity)"/>