MS-Build BeforeBuild не работает
Я настраиваю проект .csproj
для запуска некоторых пользовательских задач перед основной сборкой. Тем не менее, я не могу заставить задачи выполнять вообще.
Я раскомментировал элемент <Target Name="BeforeBuild" />
в файле .csproj
и добавил простое задание Message, но когда я его создаю, сообщение не появляется в моем выводе, поэтому кажется, что задача не запущена. Таким образом, этот фрагмент не выводит сообщение;
Листинг 1: Сообщение не появляется
<Target Name="BeforeBuild">
<Message Text="About to build ORM layer" Importance="normal" />
</Target>
Однако, если я ввожу некоторые атрибуты, я могу заставить .csproj
вообще не выполняться;
Листинг 2: Ошибка конфигурации MSBuild
<Target Name="BeforeBuild">
<Message Text="About to build ORM layer" XXImportance="normal" />
</Target>
Обратите внимание на атрибут XXImportance
. Ошибка сборки, которую я получаю, это
My.csproj(83,46): error MSB4064: The "XXImportance" parameter is not supported by the "Message" task. Verify the parameter exists on the task, and it is a settable public instance property.
Это говорит о том, что XML анализируется, что класс Message
найден, и что класс отражается на доступных свойствах.
Почему задача не выполнялась?
Я использую фреймворк 3.5.
ОБНОВЛЕНИЕ 1: В совете @Martin я попытался запустить MSBuild на консоли и получил эту ошибку:
c:\path\to\my.csproj(74,11): error MSB4019: The imported
project "C:\Microsoft.CSharp.targets" was not found. Confirm
that the path in the <Import> declaration is correct, and that
the file exists on disk.
Строка 74 читает:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
ОБНОВЛЕНИЕ 2: Я компилирую в VS2008, который использует компилятор С# 3, но проект, который я компилирую, является проектом framework 2.0. При запуске из командной строки (см. UPDATE 1) сборка, похоже, терпит неудачу, потому что есть путаница в отношении того, где указан файл Microsoft.CSharp.targets
.
Ответы
Ответ 1
Событие запускается, но вам может потребоваться изменить настройки в VS:
Инструменты- > Параметры- > Проекты и Решения- > Сборка и запуск:
И добавьте многословие MSBUild к минимальному или нормальному.
Кроме того, если вы скомпилируете через msbuild в консоли, вы увидите сообщение, не изменяя указанные выше настройки.
Ответ 2
Сегодня у нас была такая же проблема и нашла способ заставить ее работать.
Цель BeforeBuild в вашем файле .csproj предназначена для переопределения определенной цели (и ссылки) в файле Microsoft.Common.targets, который импортируется файлом Microsoft.CSharp.targets, который, в свою очередь, импортированный вашим .csproj.
Ваша проблема в том, что строка в вашем .csproj, которая импортирует Microsoft.CSharp.targets, после определения цели BeforeBuild. Переместите строку импорта выше целевой цели BeforeBuild, и все должно работать нормально.
Надеюсь, что это поможет,
Ответ 3
В Visual Studio есть функция, позволяющая отлаживать MSBuild. Вы могли бы попробовать это. Это официально не поддерживается, но полезно.