【问题标题】:Nant Fails on File::exists checkNant 在 File::exists 检查上失败
【发布时间】: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 时将保持未定义状态。

标签: .net nant


【解决方案1】:

如果扩展中涉及的属性尚未定义,您通常会看到此错误。从发布的脚本来看,该参数似乎是在 &lt;foreach&gt; 任务中定义的。

您还没有发布 &lt;foreach&gt; 任务的开始或导致它的原因,但我猜在某些情况下它永远不会进入循环。如果是这种情况,则该属性将在循环后保持未定义,并会导致此错误。

简单的解决方案是在循环之前将属性定义为默认值。鉴于它在 file::exists 中使用,将其定义为空白应该没问题:

 <property name="sabatfiletest" value="" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多