Je tente de créer une tâche personnalisée MSBuild dans IronPython à l'aide de SharpDevelop 3.1 (IronPython 2.0.0). Pour créer une tâche personnalisée, la classe doit implémenter l'interface Microsoft.Build.Framework.ITask. Selon this post vous pouvez implémenter une interface .NET en héritant de celle-ci.Tâche personnalisée MSBuild dans IronPython/SharpDevelop 3.1
L'interface ITask définit deux propriétés, BuildEngine et HostObject, ainsi qu'une méthode Execute. La méthode execute ne prend aucun argument et renvoie un booléen.
J'ai écrit le code suivant avec les références appropriées dans la solution:
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
Le code construit sans erreur. Lorsque j'utilise MSBuild Sidekick pour tenter de créer un fichier MSBuild qui utilise l'élément "UsingTask" pour référencer la DLL résultante, il se plaint que la DLL ne contient aucune tâche. Je suppose que le problème est soit avec une implémentation d'interface incomplète de ma part (probablement les propriétés, puisque je leur fais des fautes avec des attributs) ou un problème de version (IronPython 2.0 contre 2.1 dans la publication). Toute expérience ou conseil à offrir?
Après avoir lu plus loin, j'ai déterminé qu'il est plus facile de faire une tâche personnalisée par l'héritage de la classe Microsoft.Build.Utilities.Task. Cela vous permet de remplacer uniquement la méthode Execute sans vous soucier des propriétés. Toujours pas de dés avec la DLL résultante, cependant. MSBuild Sidekick me dit qu'il n'y a pas de tâches. –
Salut, pourquoi ne pas lancer la DLL à travers le réflecteur et voir ce qu'il y a dedans. – Rohit