2008-11-12 70 views
2

有没有办法像扩展任务一样从NAnt扩展功能访问Project对象?NAnt扩展功能,项目对象

在这个例子中,我想用Bar函数内BaseDirectory属性:

[FunctionSet("foo", "Foo")] 
public class FooFunctions : FunctionSetBase 
{ 
    public FooFunctions(Project project, PropertyDictionary properties) 
     : base(project, properties) 
    { 
     // When does this constructor gets called? 
    } 

    [Function("bar")] 
    public static string Bar(string name) 
    { 
     return "Bar!"; // How to get at project.BaseDirectory? 
    } 
} 

我是新来的恶性扩展,所以我不知道这是不是连一个有效的问题,或者如果我应该以不同的方式解决问题。

回答

2

伟大的问题汤姆。抽象基类FunctionSetBase,有一个属性叫项目,你可以从函数中访问。但是,我注意到Bar函数被声明为静态的,这并不总是必要的(但不是错误的)。

下应该是完全合法的恶性世界:

Function("bar")] 
public string Bar(string name) 
{ 
    string baseDirectory = Project.BaseDirectory; 
    return baseDirectory; 
} 

你看到什么问题吗?

+0

完美的作品,谢谢!对于任何感兴趣的人:FooFunctions的构造函数在每次调用(非静态)Bar方法时调用。 – 2008-11-19 16:06:29