【发布时间】:2015-03-03 09:37:11
【问题描述】:
我m getting a problem in a Nant Build im 跑步,
有一部分我需要执行一个文件然后删除它,但前提是该文件存在,
但是脚本一直失败
****相关脚本部分:****
<do>
<property name="lessfolder.parent" value="${directory::get-parent-directory(lessfile)}" />
<property name="lessfolder.parent.parent" value="${directory::get-parent-directory(lessfolder.parent)}" />
<property name="lessfolder.parent.parent.parent" value="${directory::get-parent-directory(lessfolder.parent.parent)}" />
<property name="cssfile" value="${path::get-file-name-without-extension(lessfile)}" />
<property name="sabatfiletest" value="${core.publish}\less\LessSaCompile.bat" />
<echo file="${sabatfiletest}" append="true">
call ${less} "${lessfile}" > "${lessfolder.parent.parent.parent}\SA_${cssfile}.css"
</echo>
</do>
</foreach>
<exec program="${core.publish}\less\LessCompile.bat">
</exec>
<sleep seconds="4" />
<exec program="${core.publish}\less\LessSubDomainCompile.bat">
</exec>
<sleep seconds="4" />
<exec program="${core.publish}\less\LessSaCompile.bat" if="${file::exists(sabatfiletest)}">
</exec>
<sleep seconds="4" />
<delete file="${core.publish}\less\LessCompile.bat" />
<delete file="${core.publish}\less\LessSubDomainCompile.bat" />
<delete file="${core.publish}\less\LessSaCompile.bat" if="${file::exists(sabatfiletest)}" />
</target>
****我得到的错误:****
Build Error: NAnt.Core.BuildException
Property evaluation failed. Expression: ${file::exists(sabatfiletest)} ^^^^^^^^^^^^^
in D:\Projects\Integration\Scripts\NAnt\iFOREX.Framework.BuildTFS.xml line: 725 col: 6
at NAnt.Core.PropertyDictionary.EvaluateEmbeddedExpressions(String input, Location location, Hashtable state, Stack visiting)
at NAnt.Core.PropertyDictionary.ExpandProperties(String input, Location location)
at NAnt.Core.Element.AttributeConfigurator.InitializeAttribute(PropertyInfo propertyInfo)
at NAnt.Core.Element.AttributeConfigurator.Initialize()
at NAnt.Core.Element.InitializeXml(XmlNode elementNode, PropertyDictionary properties, FrameworkInfo framework)
at NAnt.Core.Element.Initialize(XmlNode elementNode, PropertyDictionary properties, FrameworkInfo framework)
at NAnt.Core.Element.Initialize(XmlNode elementNode)
at NAnt.Core.Project.CreateTask(XmlNode taskNode, Target target)
at NAnt.Core.Target.Execute()
at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies)
at NAnt.Core.Project.Execute()
at NAnt.Core.Project.Run()
【问题讨论】:
-
您是否在您的
foreach任务之前定义了sabatfiletest属性?也许没有要循环的项目,所以该属性永远不会被定义。如果您对一个甚至不存在的属性执行file::exists,我可以看到它可能会引发此错误 -
, 它的定义 -
这是问题中
foreach任务中的那个。还是在foreach之前的脚本中也完全相同? -
我认为它只在 foreach 中,
-
那么
foreach是否有可能没有循环任何内容?如果有可能发生这种情况,则该属性在到达file::exists时将保持未定义状态。