简而言之,我的问题是:
如何在自定义任务中加载 NAnt 脚本并执行它?
详细解释:
在我们当前的项目构建中,我们需要执行外部程序。外部程序需要在构建开始之前定位。(因为它需要很长时间)
我想要的是有一些 NAnt 模块,比如 CMake 中的 FindXXX.cmake 模块,所以我可以有这样的模块:
<?xml version="1.0"?>
<project name="FindSQLServerCore" default="FindSQLServer">
<target name="FindSQLServer">
<module>
<path>
<pathelement dir="C:\Program Files\Microsoft SQL Server\100\Tools\Binn" />
<pathelement dir="C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn" />
</path>
<files>
<file name="SQLCmd.exe" />
</files>
</module>
</target>
</project>
当我需要在我的构建脚本中包含 SQLServer 时,我可以这样做:
<find module="SQLServer" required="true" />
我的方法是创建 2 个自定义任务:FindTask和ModuleTask。
FindTask将定位FindXXX.include并将其加载到当前的 NAnt 项目中。
ModuleTask将在给定路径下查找指定文件并返回结果。
但是我无法通过在FindTask中加载构建脚本来找到创建和执行 NAnt 任务的方法。Project.CreateTask(XmlNode)仅接受已加载但不来自新加载的 XML 的节点。
有没有办法通过在自定义任务中加载构建脚本来创建任务? 还是我这样做的方式是 NAnt 风格?有更好的方法来实现相同的目标吗?
PS。你可能会问为什么不直接使用
<include file="FindSQLServer.include" />
我不这样做的原因是我想传入所需的参数,但不将其设置为变量并将其传入。
你可以在这里获得 NANT 扩展:NAntFind@github