【问题标题】:How to detect whether fileset is defined?如何检测是否定义了文件集?
【发布时间】:2011-12-19 10:30:11
【问题描述】:

我的自定义 NAnt 任务依赖于某个文件集。它被认为是由任务执行的时间定义的。我想确保在使用之前定义文件集。我在想类似于property::exists('property') 的东西。

我找不到合适的功能。 NAnt(或NAntContrib)是否可以开箱即用?

【问题讨论】:

  • 通常,任务不应“依赖”文件集/属性,而应采用显式参数。文件集不需要重新声明,因为它可以通过简单的 refid 引用来包含。
  • 不确定我是否理解正确。我使用 refid 引用文件集,但如果文件集未在某处定义,则会出现“未定义”错误。
  • 顺便说一句,我在尝试将文件集作为参数传递时遇到问题 - 似乎 NAnt 无法将其扩展回任务中的文件集,将其视为字符串文字。它是已知的吗?还是我只是掉进了所有新手都会掉进的坑里? :)
  • 我的意思是:<myTask><filesetParameter refid="compileUs"/><myTask>。如果此处未定义引用的文件集,则异常是正确的行为,因为构建无法继续。
  • 因此,您的建议是向自定义任务添加一个“文件集”类型的参数,并在文件集未通过时失败时按照预期的行为进行处理。对?而且我认为没有办法在失败之前找出文件集是否已定义,对吧?

标签: nant fileset nantcontrib


【解决方案1】:

通常,任务不应依赖于文件集或属性。相反,它们应该采用显式参数。可以使用refid 重用现有文件集,因此不会因此产生重新声明。示例语法:

<myTask><filesetParameter refid="compileUs"/><myTask>

如果引用的文件集未定义,NAnt 将抛出异常 - 这是正确的(预期的)行为,因为此时构建无法继续。

在您的任务中,该属性将定义如下:

[TaskName("myTask")]
public class MyTask : Task
{
  [TaskAttribute("filesetParameter", Required = true)]
  public FileSet FilesetParamter
  { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2014-07-09
    • 1970-01-01
    • 2012-02-28
    相关资源
    最近更新 更多