2008-11-12 4 views
2

Existe-t-il un moyen d'accéder à l'objet Project à partir d'une fonction d'extension NAnt, comme cela peut être fait à partir d'une tâche d'extension?Fonction d'extension NAnt, Objet de projet

Dans cet exemple, je veux utiliser la propriété BaseDirectory dans la fonction Bar:

[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? 
    } 
} 

Je suis nouveau à des extensions NAnt, donc je ne sais pas si cela est encore une question valable ou si Je devrais aborder le problème différemment.

Répondre

2

Bonne question Tom. La classe de base abstraite, FunctionSetBase, possède une propriété appelée Project à laquelle vous pouvez accéder à partir de la fonction Bar. Cependant, j'ai remarqué que la fonction Bar est déclarée statique, ce qui n'est pas toujours nécessaire (mais pas faux).

Les points suivants doivent être tout à fait légale dans le monde NAnt:

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

Voyez-vous des problèmes?

+0

Cela fonctionne parfaitement, merci! Pour toute personne intéressée: Le constructeur de FooFunctions est appelé à chaque invocation de la méthode Bar (non statique). –