Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Необходимо установить.BuildEngine свойство пользовательской задачи, которую Вы называете.
можно установить его на тот же BuildEngine, который текущая задача использует для включения вывода беспрепятственно.
Task myCustomTask = new CustomTask();
myCustomTask.BuildEngine = this.BuildEngine;
myCustomTask.Execute();
При реализации интерфейса ITask, необходимо будет инициализировать класс Журнала сами.
Иначе необходимо просто наследоваться от Задача в Microsoft.Build.Utilities.dll, Который реализует ITask и делает большую работу, требующую беготни для Вас.
Вот ссылочная страница для создания пользовательской задачи, это объясняет довольно многое из него.
Здание пользовательская ссылка задачи MSBuild
Также стоящий взгляда
, Как отладить пользовательскую задачу
MSBuild Другой тогда, это могло Вы отправлять XML MSBuild, который Вы используете для вызова Вашей пользовательской задачи. Сам код, очевидно, был бы большей частью справки:-)
Я нашел, что экземпляр журнала не работает, если задача не работает внутри 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);
}
}