简而言之,我的问题是:
如何在自定义任务中加载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 &amp;的 ModuleTask 即可。
FindTask 将找到 FindXXX.include 并将其加载到当前的NAnt项目中。
ModuleTask 将在给定路径下找到指定文件并返回结果。
但是我找不到创造和创造的方法。通过在 FindTask 中加载构建脚本来执行NAnt任务。 Project.CreateTask(XmlNode)只接受已加载的节点,但不接受新加载的XML。
有没有办法通过在自定义任务中加载构建脚本来创建任务? 或者我是这样做的NAnt风格?有没有更好的方法来实现同样的目标?
PS。您可能会问为什么不使用
<include file="FindSQLServer.include" />
我不是这样做的原因是我想传递 required 参数,但不将其设置为变量并将其传入。
您可以在此处获取NANT扩展程序:NAntFind@github
答案 0 :(得分:0)
加载NAnt脚本并在自定义任务中执行它的一种方法是创建一个新项目,然后使用该项目加载脚本,然后执行。例如:
var findProject = new Project(nantModule, Level.Info, Project.IndentationLevel);
findProject.Execute();
如果项目失败,则应抛出异常。