2011-02-23 81 views

回答

26

你可以在目標上使用Exists條件嗎?

只有在msbuild文件所在的同一目錄下有一個名爲Testing的目錄或文件時,纔會執行OnlyIfExists目標。

<ItemGroup> 
    <TestPath Include="Testing" /> 
</ItemGroup> 
<Target Name="OnlyIfExists" Condition="Exists(@(TestPath))"> 
    <Message Text="This ran!" Importance="high" /> 
</Target> 
+1

非常感謝。這很好,很清楚。 – 2011-02-24 23:00:49

8

有沒有必要使用擴展包,MSBuild可以處理這很好。您需要考慮是否這是可能作爲構建的一部分創建或刪除的文件夾。如果是這樣,那麼你想要確保使用在目標中聲明的動態項目組(如果檢查多個文件夾)或者如果只檢查一個文件夾就可以使用路徑。此示例顯示了兩種情況:

<Target Name="MyTarget"> 
    <!-- single folder with property --> 
    <PropertyGroup> 
     <_CheckOne>./Folder1</_CheckOne> 
     <_CheckOneExistsOrNot 
      Condition="Exists('$(_CheckOne)')">exists</_CheckOneExistsOrNot> 
     <_CheckOneExistsOrNot 
      Condition="!Exists('$(_CheckOne)')">doesn't exist</_CheckOneExistsOrNot> 
    </PropertyGroup> 
    <Message 
     Text="The folder $(_CheckOne) $(_CheckOneExistsOrNot)" 
     /> 

    <!-- multiple folders with items --> 
    <ItemGroup> 
     <_CheckMultiple Include="./Folder2" /> 
     <_CheckMultiple Include="./Folder3" /> 
    </ItemGroup> 
    <Message 
     Condition="Exists('%(_CheckMultiple.Identity)')" 
     Text="The folder %(_CheckMultiple.Identity) exists" 
     /> 
    <Message 
     Condition="!Exists('%(_CheckMultiple.Identity)')" 
     Text="The folder %(_CheckMultiple.Identity) does not exist" 
     /> 
</Target>