2

我有一个常见的 NAnt 脚本(包含一些常见的目标和常量),我包含在许多其他 NAnt 脚本中,如下所示:

<include buildfile="<path>\common.build" verbose="true" />

调用脚本位于不同的文件夹中。

在这个包含的脚本中,我需要从包含脚本所在的同一目录中读取一个文件。“当前目录”设置为调用脚本的目录,不包括在内。如何获取包含脚本的目录路径?

如果我使用以下构造(在包含的脚本中):

${ path::get-directory-name(project::get-buildfile-path()) }

然后我得到调用脚本的文件夹路径,而不是包含的脚本。

有什么方法可以获取其中包含的脚本的路径吗?

问候,伊万。

4

2 回答 2

4

My suggestion: Define the path to the called script file in a property inside the calling script like this:

<property name="include.buildfile.path" value="C:\foo\common.build" />
<include buildfile="${include.buildfile.path}" verbose="true" />

I the common script you access the desired directory path like this:

${path::get-directory-name(include.buildfile.path)}
于 2012-09-15T08:53:43.800 回答
3

我查看了 NAnt 源代码,不幸的是,您想要实现的功能不适用于现有或自定义功能 - NAnt 将包含的文件附加到它的项目结构中,同时Project有一个LocationMap获取某个节点来自的文件名,它被标记为internal,所以甚至不能用脚本提取。您可以寻求一种解决方法,例如假设您的文件相对于主脚本的位置不变(然后从那里向下走),或者构建一个自定义版本的 NAnt,其中包含一个公开您需要的功能的函数。第一个解决方案并不漂亮,第二个解决方案并不容易。

于 2012-09-14T13:29:08.657 回答