2011-09-16 47 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的东西。