MS-Build BeforeBuild не стреляет - PullRequest
13 голосов
/ 28 июля 2010

Я настраиваю проект .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 framework.

ОБНОВЛЕНИЕ 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, которыйиспользует компилятор C # 3, но проект, который я компилирую, является проектом framework 2.0.При запуске из командной строки (см. ОБНОВЛЕНИЕ 1) сборка кажется неудачной, поскольку существует путаница относительно того, где указан файл Microsoft.CSharp.targets.

Ответы [ 3 ]

19 голосов
/ 08 июня 2012

Была такая же проблема сегодня и нашла способ заставить ее работать.

Цель BeforeBuild в вашем файле .csproj предназначена для переопределения цели, определенной (и указанной) в файле Microsoft.Common.targets, который импортируется файлом Microsoft.CSharp.targets, который, в свою очередь, является импортировано вашим .csproj.

Ваша проблема в том, что строка в вашем .csproj, которая импортирует Microsoft.CSharp.targets, находится после вашего определения цели BeforeBuild. Переместите строку импорта выше целевого объекта BeforeBuild, и все должно работать нормально.

Надеюсь, это поможет,

14 голосов
/ 28 июля 2010

Событие запускается, но вам может потребоваться изменить настройки в VS:

Инструменты-> Параметры-> Проекты и Решения-> Сборка и запуск:

И установите многословность MSBUild на минимальное или нормальное значение.

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

2 голосов
/ 28 июля 2010

В Visual Studio есть функция, позволяющая отладить MSBuild . Вы можете попробовать это. Это официально не поддерживается, но полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...