2011-09-16 48 views
0

無論好壞,我已經構建了自己的msbuild任務。我給它命名爲「msbuild」,它與NAntContrib中的一個發生衝突。覆蓋NAnt中的重複任務?

假設我無法從NAntContrib中刪除一個,有沒有辦法在保持相同任務名稱的情況下覆蓋contrib版本?

或者也許可以編寫另一個任務,可以將已加載的任務的別名命名爲別的?

或者我可以更改我的任務名稱。

任何信息,將不勝感激。

回答

0

我發現似乎工作的一點點黑客基本上是給你的任務一個命名空間前綴。

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

然後在您的惡性構建文件:

<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的東西。