2009-06-10 14 views
0

Ich versuche, eine benutzerdefinierte MSBuild-Aufgabe in IronPython mit SharpDevelop 3.1 (IronPython 2.0.0) zu erstellen.MSBuild benutzerdefinierte Aufgabe in IronPython/SharpDevelop 3.1

Um eine benutzerdefinierte Aufgabe zu erstellen, muss die Klasse die Microsoft.Build.Framework.ITask-Schnittstelle implementieren. Nach this post können Sie eine .NET-Schnittstelle implementieren, indem Sie von ihr erben.

Die ITask-Schnittstelle definiert zwei Eigenschaften, BuildEngine und HostObject, sowie eine Execute-Methode. Die Methode execute benötigt keine Argumente und gibt einen booleschen Wert zurück.

Ich habe den folgenden Code mit den entsprechenden Referenzen in der Lösung geschrieben:

import Microsoft.Build.Framework as mbf 
import Microsoft.Build.Utilities as mbu 

class CustomTask(mbf.ITask): 
    ''' 
    Print a message to the log. 
    ''' 
    def __init__(self): 
     self.BuildEngine = None 
     self.HostObject  = None 

    def Execute(): 
     log  = mbu.TaskLoggingHelper(self) 
     log.LogMessageFromText('This is a test.', mbu.MessageImportance.High) 
     return True 

Der Code erstellt, ohne Fehler. Wenn ich MSBuild Sidekick verwenden, um eine MSBuild-Datei zu erstellen, die das Element "UsingTask" verwendet, um auf die resultierende DLL zu verweisen, beschwert es sich, dass die DLL keine Aufgaben enthält.

Ich vermute, das Problem ist entweder mit einer unvollständigen Schnittstellenimplementierung meinerseits (am wahrscheinlichsten die Eigenschaften, da ich sie mit Attributen fälschen) oder ein Versions-Problem (IronPython 2.0 versus 2.1 in der Post). Irgendwelche Erfahrungen oder Ratschläge anzubieten?

+0

Beim weiteren Lesen stellte ich fest, dass es einfacher ist, eine benutzerdefinierte Aufgabe durch Vererbung der Microsoft.Build.Utilities.Task-Klasse zu erstellen. Dadurch können Sie nur die Execute-Methode überschreiben, ohne sich über die Eigenschaften Gedanken machen zu müssen. Immer noch keine Würfel mit der daraus resultierenden DLL. MSBuild Sidekick sagt mir, dass es keine Aufgaben gibt. –

+0

Hallo, warum führst du die DLL nicht durch den Reflektor und siehst, was drin ist. – Rohit

Antwort

0

Ich erwarte, dass Sie die Klasse nicht öffentlich gemacht haben.

Verwandte Themen