MSBuild ItemGroup,其中不包括.svn目录和文件

时间:2020-03-05 18:55:54  来源:igfitidea点击:

如何构造一个MSBuild ItemGroup以排除.svn目录和(递归)其中的所有文件。我有:

<ItemGroup> 
     <LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*" Exclude=".svn" />
</ItemGroup>

目前,但这并不排除任何内容!

解决方案

回答

感谢帮助,设法将其排序如下:

<ItemGroup>
     <LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*" 
                   Exclude="$(LibrariesReleaseDir)\**\.svn\**" />
</ItemGroup>

事实证明,模式匹配基本上是在文件上运行的,因此我们必须排除MSBuild的.svn目录(.svn \ **)下面的所有内容,以排除.svn`目录本身。

回答

真正递归地,这是一个更好的方法。我似乎无法让解决方案深入到1级以上:

<LibraryFiles  
    Include="$(LibrariesReleaseDir)**\*.*"  
    Exclude="$(LibrariesReleaseDir)**\.svn\**\*.*"/>

回答

所以问题是由于某些原因在msbuild中链接变量。以下内容对我有用,请注意,我只需要使用基于MSBuildProjectDirectory变量的相对路径。

<CreateItem Include="$(MSBuildProjectDirectory)\..\Client\Web\Foo.Web.UI\**\*.*"
            Exclude="$(MSBuildProjectDirectory)\..\Client\Web\Foo.Web.UI\**\.svn\**">
  <Output TaskParameter="Include" ItemName="WebFiles" />
</CreateItem>

以下内容不起作用:

<PropertyGroup>
    <WebProjectDir>$(MSBuildProjectDirectory)\..\Client\Web\Foo.Web.UI</WebProjectDir>
</PropertyGroup>
<CreateItem Include="$(WebProjectDir)\**\*.*"
            Exclude="$(WebProjectDir)\**\.svn\**">
  <Output TaskParameter="Include" ItemName="WebFiles" />
</CreateItem>

很奇怪!我只花了3个小时就完成了这个。