无论好坏,我已经构建了自己的msbuild任务。我给它命名为'msbuild',它与NAntContrib中的一个碰撞。
假设我无法从NAntContrib中删除那个,是否有办法覆盖contrib版本,同时保持相同的任务名称?
或者也许可以编写另一个任务,可以将已经加载的任务命名为别名?
或者我可以更改我的任务名称。
任何信息都将不胜感激。
答案 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