使用 NAnt 0.92(之前版本为 0.85,出现同样的结果)
我正在尝试在 NAnt 中调用 delete 任务,在调用 msbuild 后删除除 .dll 文件之外的所有文件(请参见下面的脚本..我指的是“build”目标中的 delete)。但是 delete 任务似乎没有执行。
初始的 delete 任务可以正常工作,并按预期运行,从指定的构建目录中删除所有文件。然而,在编译后的第二个 delete 任务不起作用。
我尝试过直接删除所有内容(不使用 exclude 标记),并尝试显式设置 failonerror 和 verbose 为 true。但这些都没有任何区别。我还尝试使用 sleep 在 delete 任务之前停止进程,以防 msbuild 中的某些东西未能及时释放文件以进行删除。我尝试将删除放入单独的目标中,但仍然无济于事。
很明显,在调用 msbuild 之前该命令起作用,如果尝试从与 msbuild 输出目标不同的目录中删除,则在调用 msbuild 后它也能正常工作(即复制输出文件,然后删除相关文件)。
我确信这个问题太基础了,不可能是一个 bug,但我还是想问一下。当然,与此同时,我将使用复制文件到不同位置的解决方法,删除不需要的文件,然后适当移动,但我对此很好奇。
我怀疑,除非这种行为是经过设计的(尽管我在 NAnt 文档中找不到任何建议),否则 msbuild 进程会锁定输出文件,直到 NAnt 进程完成?这是我的最佳猜测。如果有更多见解,欢迎指教。
编辑:此外,如果我显式设置 msbuild 的 \OutputPath 开关,则不会出现相同的问题。仅在使用默认 OutputPath 时才会出现问题。
NAnt 构建文件:
<?xml version="1.0" encoding="utf-8" ?>
<project name="Reports.TestBench.PreBuild" default="postbuild.cleanup" basedir="." xmlns="http://nant.sourceforge.net/release/0.86-beta1/nant.xsd">
<property name="nant.settings.currentframework" value="net-4.0" />
<property name="project.StandardReports" value="${project::get-base-directory()}\Reports.StandardReports\Palladium.Reports.StandardReports.csproj" />
<property name="output.Dir" value="${project::get-base-directory()}\bin\debug\"/>
<property name="build.Type" value="debug"/>
<!--Deletes the pre-existing build files-->
<target name="clean">
<delete>
<fileset basedir="${output.Dir}">
<include name="*.*" />
</fileset>
</delete>
</target>
<!--Builds the projects to the specified build directory-->
<target name="build" depends="clean" description="Build the Palladium Reports Standard Reports application">
<msbuild project="${project.StandardReports}">
<arg value="/p:Configuration=${build.Type}" />
<!--arg value="/p:OutputPath=${path::get-full-path(buildDir.Client)}\Reports" /-->
<arg value="/t:Rebuild" />
</msbuild>
<delete failonerror="true" verbose="true">
<fileset basedir="${output.Dir}">
<include name="*.*" />
<exclude name="Palladium.Reports.StandardReports.dll" />
</fileset>
</delete>
</target>
</project>
< p > NAnt输出摘要显示构建成功且没有进一步消息:< /p >
[msbuild] Build succeeded.
[msbuild] 0 Warning(s)
[msbuild] 0 Error(s)
[msbuild]
[msbuild] Time Elapsed 00:00:03.19
BUILD SUCCEEDED
Total time: 3.5 seconds.