Переопределить дубликат задачи в NAnt? - PullRequest
0 голосов
/ 17 сентября 2011

К лучшему или худшему, я создал свою собственную задачу msbuild. Я дал ему имя «msbuild», и оно совпадает с именем от NAntContrib.

При условии, что я не могу удалить один из NAntContrib, есть ли способ переопределить версию contrib, сохраняя то же имя задачи?

Или, возможно, может быть написана другая задача, которая может присвоить псевдониму уже загруженной задачи другое имя?

Или я, возможно, смогу изменить имя моей задачи.

Любая информация будет оценена.

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Я не видел, как вы можете перегрузить имена задач. Похоже, проще всего было бы изменить имя ваших задач на что-то, что не является msbuild.

0 голосов
/ 05 января 2013

Немного хака, который, как мне показалось, работает, в основном дает вашей задаче префикс пространства имен.

[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

...