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

MSBuild使用通配符时的项目顺序,msbuild,Msbuild,使用通配符从文件创建MSBuild项时,例如 <ItemGroup> <Scripts>$(ScriptsDirectory)\**\*.sql</Scripts> </ItemGroup> $(脚本目录)\***.sql 文件似乎总是按路径按字母顺序排序 但是,这种排序顺序有保证吗?我可以信赖它吗?是的,MSBuild将始终按路径的字母顺序排序,以保证可重复性。(这在我的新书《MSBuild Trickery》中有介绍)我需要根据实际文

使用通配符从文件创建MSBuild项时,例如

<ItemGroup>
  <Scripts>$(ScriptsDirectory)\**\*.sql</Scripts>
</ItemGroup>

$(脚本目录)\***.sql
文件似乎总是按路径按字母顺序排序


但是,这种排序顺序有保证吗?我可以信赖它吗?

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

我需要根据实际文件名而不是完整路径对文件项组进行排序。所以我写了一个MSBuild任务来完成这个任务,希望它能帮助


不久前,我遇到了一个从VisualStudio2008到2010的过渡过程,其中对使用通配符创建的项目组进行了排序。以下划线字符“\”开头的文件名从结果中的第一个变为最后一个

当时,我使用。这提供了一个TaskAction来显式排序ItemGroup

例如



@Brian Kretzler:有任何参考文献记录在哪里?我对这个问题很感兴趣,但没有找到任何关于项目顺序的信息。我知道有人对自我提升投了反对票,但既然你问了,只需在任何搜索引擎中键入“MSBuild Trickery”——它在第页136@BrianKretzler我们不想看到自我推销,但是如果你有一个信息源,比如你的书,你可以简单地说:你可以在第136页的“MSBuild trickry”中找到关于这个主题的更多信息,这在任何搜索引擎中都很容易找到。我看不出有什么问题。
<!-- 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)"/>