Пользовательская Задача MSBuild модульного теста без “Задачи попыталась зарегистрироваться, прежде чем она была инициализирована” ошибка

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

26
задан alexandrul 19 May 2010 в 10:24
поделиться

3 ответа

Необходимо установить.BuildEngine свойство пользовательской задачи, которую Вы называете.

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

Task myCustomTask = new CustomTask();
myCustomTask.BuildEngine = this.BuildEngine;
myCustomTask.Execute();
27
ответ дан Branstar 28 November 2019 в 06:51
поделиться

При реализации интерфейса ITask, необходимо будет инициализировать класс Журнала сами.

Иначе необходимо просто наследоваться от Задача в Microsoft.Build.Utilities.dll, Который реализует ITask и делает большую работу, требующую беготни для Вас.

Вот ссылочная страница для создания пользовательской задачи, это объясняет довольно многое из него.

Здание пользовательская ссылка задачи MSBuild

Также стоящий взгляда

, Как отладить пользовательскую задачу

MSBuild Другой тогда, это могло Вы отправлять XML MSBuild, который Вы используете для вызова Вашей пользовательской задачи. Сам код, очевидно, был бы большей частью справки:-)

7
ответ дан evilhomer 28 November 2019 в 06:51
поделиться

Я нашел, что экземпляр журнала не работает, если задача не работает внутри msbuild, таким образом, я обычно обертываю свои вызовы для Входа, затем проверьте значение BuildEngine, чтобы определить, работаю ли я внутри msbuild. Как ниже.

Tim

private void LogFormat(string message, params object[] args)
{
    if (this.BuildEngine != null)
    {
        this.Log.LogMessage(message, args);
    }
    else
    {
        Console.WriteLine(message, args);
    }
}
14
ответ дан Tim Bailey 28 November 2019 в 06:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: