2011-07-13 97 views
3

我有一個任務,我選擇一些文件,基於擴展名,但希望一些文件夾沒有被處理。問題在於,似乎Exclude過濾器在包含一個之前應用,因此最後包含所有文件。MSBuild排除/包括命令

這是我選擇的文件:

<CreateItem Exclude="**\.svn\**; 
    $(MSBuildProjectDirectory)\obj\**; 
    $(MSBuildProjectDirectory)\bin\**; 
    $(MSBuildProjectDirectory)\My Project\*.*; 
    $(MSBuildProjectDirectory)\Properties\*.*; 
    $(MSBuildProjectDirectory)\Dependencies\*.*; 
    $(MSBuildProjectDirectory)\Installation\**; 
    $(MSBuildProjectDirectory)\Extenders\**\*.*" 
Include="$(MSBuildProjectDirectory)\**\*.ascx; 
    $(MSBuildProjectDirectory)\**\*.aspx; 
    $(MSBuildProjectDirectory)\**\*.css; 
    $(MSBuildProjectDirectory)\**\*.xml; 
    $(MSBuildProjectDirectory)\**\*.xslt; 
    $(MSBuildProjectDirectory)\**\*.js; 
    $(MSBuildProjectDirectory)\**\*.resx; 
    $(MSBuildProjectDirectory)\**\*.rpt; 
    $(MSBuildProjectDirectory)\**\*.gif; 
    $(MSBuildProjectDirectory)\**\*.jpg; 
    $(MSBuildProjectDirectory)\**\*.png;" 

>

在這種情況下,如果任何「排除」文件夾包括其擴展名匹配「包含」列表中的任何文件,它仍然會被列入最終名單。

所以問題是我該如何強制排除文件夾中的所有文件都被排除在外。

編輯:似乎MsBuild文件中有另一個問題導致此失敗。 它按預期工作。

回答

2

MSDN您可以閱讀CreateItem任務已被棄用。建議使用ItemGroup,因爲自.NET 3.5開始,您可以將其嵌入到目標中。在你的情況,如果你想,以確保排除運行後,包括,你可以寫:

<ItemGroup> 
    <YourItemName Include="$(MSBuildProjectDirectory)\**\*.ascx;$(MSBuildProjectDirectory)\**\*.aspx;$(MSBuildProjectDirectory)\**\*.css;$(MSBuildProjectDirectory)\**\*.xml;$(MSBuildProjectDirectory)\**\*.xslt;$(MSBuildProjectDirectory)\**\*.js;$(MSBuildProjectDirectory)\**\*.resx;$(MSBuildProjectDirectory)\**\*.rpt;$(MSBuildProjectDirectory)\**\*.gif;$(MSBuildProjectDirectory)\**\*.jpg;$(MSBuildProjectDirectory)\**\*.png;" Exclude="**\.svn\**;$(MSBuildProjectDirectory)\obj\**;$(MSBuildProjectDirectory)\bin\**;$(MSBuildProjectDirectory)\My Project\*.*;$(MSBuildProjectDirectory)\Properties\*.*;$(MSBuildProjectDirectory)\Dependencies\*.*;$(MSBuildProjectDirectory)\Installation\**;$(MSBuildProjectDirectory)\Extenders\**\*.*"/> 
</ItemGroup> 

我知道你已經整理出來的,但我張貼萬一別人有類似的問題。如果要包含來自多個源的數據並且在代碼中的許多位置使用ItemGroup,則它會更有幫助。

+1

如果沒有包含屬性,您就無法使用排除屬性的ItemGroup元素,因此您的第一個示例將不會編譯... – realMarkusSchmidt

+0

謝謝!如果它解析,我沒有正確檢查,下次我會更加小心。刪除此示例以避免讓人困惑 –

+0

感謝您的答案,即使您沒有必要。你當然幫助過我。 –