2011-09-16 5 views
0

良いことと悪いことに、自分でmsbuildタスクを構築しました。私は名前を 'msbuild'とし、NAntContribのものと衝突しています。NAntの重複タスクをオーバーライドしますか?

、私はNAntContribから1削除することはできませんと仮定すると、同じタスク名を維持しながらのcontribバージョンを上書きする方法はありますか?

それとも、別のタスクには、何か他のものを命名することがすでにロードされたタスクを別名設定できると書かれるだろうか?

おそらくタスク名を変更できます。

すべての情報をいただければ幸いです。

答えて

0

私が見つけたハックのビットは、基本的にあなたのタスクに名前空間接頭辞を与えているようです。

[TaskName("zz:msbuild")] 
public class MsbuildTask : ExternalProgramBase 
{ 
} 

は、その後、あなたのNAntのビルドファイルで:

<project default="Build" name="TestBuild" 
    xmlns="http://nant.sf.net/schemas/nant-0.85.win32.net-1.0.xsd" 
    xmlns:zz="http://nant.sf.net/schemas/nant-0.85.win32.net-1.0.xsd"> 
    <target name="Build"> 
     <zz:msbuild target="Build" project="TestBuild.sln" 
      verbosity="${msbuild.verbosity}"> 
      <property name="Configuration" value="${build.configuration}" /> 
     </zz:msbuild> 
    </target> 
</project> 

私は好きではない唯一のものは、私がTaskNameAttributeに接頭辞を埋め込むために持っているという事実です。これは内部的にNAntが文字列 "zz:msbuild"を使用してタスクをハッシュし、XmlNode.Nameプロパティに基づいてルックアップするために必要です。

また、接頭辞がデフォルトの名前空間を指していることにも注意してください。これは、NAntがデフォルトのNAnt名前空間以外の名前空間を持つノードを破棄するためです。なぜ彼らはそれをしたのか理解できますが、絶対に必要なことはわかりません。 NAntのソースを見てみると

、私が接頭辞を埋め込むために、タスクに別の名前空間を提供する必要がないように調整することが非常に可能と思われます。

このアプローチに代わる、私が以前に使用してきた一つが、「zz.msbuild」のようなタスク名を使用することでした。しかし、それは本当に正しいとは思わなかった。要素名にピリオドをつけて読んだことはお勧めしません。しかしそれ以上に、それは良く見えませんでした:P

1

タスク名を過負荷にする方法はありませんでした。あなたのタスクの名前をmsbuildでないものに変更するのが最も簡単な方法です。