使用通配符时的MSBuild项目顺序

时间:2011-08-13 12:56:54

标签: msbuild

使用通配符(例如

)从文件创建MSBuild项目时
<ItemGroup>
  <Scripts>$(ScriptsDirectory)\**\*.sql</Scripts>
</ItemGroup>

文件似乎始终按路径按字母顺序排序。

但是,这种排序顺序是否得到保证 - 我可以依赖它吗?

3 个答案:

答案 0 :(得分:6)

是的,MSBuild将始终按路径按字母顺序排序,以确保可重复性。 (这在我的新书“MSBuild Trickery”中有所介绍)

答案 1 :(得分:0)

我需要根据实际文件名对文件的ItemGroup进行排序,而不是完整路径。所以我写了一个MSBuild任务来做到这一点,希望它有帮助...

MSBuild sort itemgroup of files by filename

答案 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)"/>