私はSharpDevelop 3.1(IronPython 2.0.0)を使用してIronPythonでMSBuildカスタムタスクを構築しようとしています。IronPython/SharpDevelop 3.1のMSBuildカスタムタスク
カスタムタスクを作成するには、クラスでMicrosoft.Build.Framework.ITaskインターフェイスを実装する必要があります。 this postによれば、それを継承して.NETインターフェイスを実装することができます。
ITaskインターフェイスは、BuildEngineとHostObjectの2つのプロパティとExecuteメソッドを定義します。 executeメソッドは引数をとらず、ブール値を返します。
私は、溶液中の適切な参照して以下のコードを書いている:
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
コードがエラーなしで構築します。 MSBuild Sidekickを使用して、 "UsingTask"要素を使用して結果のdllを参照するMSBuildファイルを作成しようとすると、dllにタスクが含まれていないと文句を言います。
私は、不完全なインターフェイスの実装(私は属性で偽造しているので、おそらくプロパティ)か、バージョンの問題(IronPython 2.0とポストの2.1)のどちらかが問題であると推測しています。経験やアドバイスがあれば教えてください。
さらに読むと、Microsoft.Build.Utilities.Taskクラスの継承によってカスタムタスクを作成する方が簡単だと判断されました。これにより、プロパティを気にせずにExecuteメソッドをオーバーライドすることしかできません。しかし、結果のDLLを持つダイスはまだありません。 MSBuild Sidekickはそれにタスクがないことを私に伝えます。 –
こんにちは、リフレクターを通してDLLを実行して、内部に何が入っているのか見てみませんか? – Rohit