我如何构建一个MSBuild ItemGroup来排除 .svn 目录及其下所有文件(递归)?我已经有:
<ItemGroup>
<LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*" Exclude=".svn" />
</ItemGroup>
目前的情况是这样,但这并不排除任何可能性!
我如何构建一个MSBuild ItemGroup来排除 .svn 目录及其下所有文件(递归)?我已经有:
<ItemGroup>
<LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*" Exclude=".svn" />
</ItemGroup>
目前的情况是这样,但这并不排除任何可能性!
感谢您的帮助,我按照以下方式解决了它:
<ItemGroup>
<LibraryFiles Include="$(LibrariesReleaseDir)\**\*.*"
Exclude="$(LibrariesReleaseDir)\**\.svn\**" />
</ItemGroup>
原来模式匹配基本上是在文件上运行的,因此您必须排除所有在.svn
目录(.svn\\**
)下面的内容,使MSBuild可以排除.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>
非常奇怪!我刚花了三个小时处理这个问题。
这里有一种更好的方法,可以真正地进行递归。我似乎无法让您的解决方案超过1层深度:
<LibraryFiles
Include="$(LibrariesReleaseDir)**\*.*"
Exclude="$(LibrariesReleaseDir)**\.svn\**\*.*"/>
我在使用包含/排除方法时遇到了一些故障,所以这里是一个对我有效的替代方案:
<ItemGroup>
<MyFiles Include=".\PathToYourStuff\**" />
<MyFiles Remove=".\PathToYourStuff\**\.svn\**" />
</ItemGroup>