覆盖NAnt中的重复任务?

时间:2011-09-16 22:59:41

标签: nant

无论好坏,我已经构建了自己的msbuild任务。我给它命名为'msbuild',它与NAntContrib中的一个碰撞。

假设我无法从NAntContrib中删除那个,是否有办法覆盖contrib版本,同时保持相同的任务名称?

或者也许可以编写另一个任务,可以将已经加载的任务命名为别名?

或者我可以更改我的任务名称。

任何信息都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我还没有看到过重载任务名称的方法。听起来最简单的事情就是将你的任务名称更改为非msbuild的东西。

答案 1 :(得分: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