40

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

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

目前,但这并不排除任何事情!

4

4 回答 4

64

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

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

结果发现模式匹配基本上在文件上运行,因此您必须排除.svn目录 ( .svn\\**) 下方的所有内容,以便 MSBuild 排除.svn目录本身。

于 2008-09-16T13:57:29.650 回答
12

所以问题在于在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 个小时在这个上。

于 2009-03-04T22:23:18.870 回答
3

这是一种更好的方法,真正递归。我似乎无法让您的解决方案超过 1 级:

<LibraryFiles  
    Include="$(LibrariesReleaseDir)**\*.*"  
    Exclude="$(LibrariesReleaseDir)**\.svn\**\*.*"/>
于 2008-12-19T13:20:33.043 回答
1

我在使用 Include/Exclude 方法时遇到了一些小故障,所以这里有一些对我有用的东西:

<ItemGroup>
    <MyFiles Include=".\PathToYourStuff\**" />
    <MyFiles Remove=".\PathToYourStuff\**\.svn\**" />
</ItemGroup>
于 2012-04-30T16:23:24.083 回答