如何使用msbuild扩展包任务可靠地验证文件夹是否存在?
如果不抛出错误并停止构建,我怎么能这样做?
答案 0 :(得分:28)
您可以在目标上使用存在条件吗?
只有在msbuild文件所在的目录中有名为Testing的目录或文件时,才会执行OnlyIfExists目标。
<ItemGroup>
<TestPath Include="Testing" />
</ItemGroup>
<Target Name="OnlyIfExists" Condition="Exists(@(TestPath))">
<Message Text="This ran!" Importance="high" />
</Target>
答案 1 :(得分: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>