2016-05-26 2 views
1

В настоящий момент я пытаюсь создать, казалось бы, очень базовую задачу, то есть добавить новую настраиваемую цель в файл csproj и запустить ее из командной строки с помощью msbuild.Добавление и запуск пользовательской цели с помощью msbuild

Я провел обширные исследования в сети, но не нашел решения, которое фактически работает.

Давайте предположим, что я добавляю следующую цель в мой файл csproj:

<Target Name="TeamCity"> 
    <Message Text="I am Running!"/> 
    </Target> 

или даже что-то, что зависит от сборки:

<Target Name="TeamCity" DependsOnTargets="Build"> 
    <Message Text="I am Running!"/> 
    </Target> 

Это то, что предлагает MSBuild документации. Хотя я могу запустить предустановленную цель на csproj:

msbuild MySolution.sln /t:MyProject:Rebuild /p:Configuration="Release" /p:Platform="Any CPU" 

Я не смог запустить цель, я только что добавил - то есть TeamCity цель:

msbuild MySolution.sln /t:MyProject:TeamCity /p:Configuration="Release" /p:Platform="Any CPU" 

Я всегда получаю MSB4057 ошибки : Цель «TeamCity» не существует в проекте.

Что такое глубоко скрытый секрет, чтобы сделать это?

PS. Обратите внимание, что мне нужно, чтобы задача работала на уровне проекта, а не на решении. И мне нужно запустить msbuild MySolution.sln ... не так много неверно предложить msbuild MyProject.csproj ...

ответ

0

Секрет довольно прост - вы не можете заставить это работать.

Потому что, msbuild создает промежуточный файл проекта (YourSolution.sln.metproj), но у него не будет импорта из вашего проектаProject.csproj, включая файлы .targets. Вот почему YourCustomTarget не распознается.

Что вы можете попробовать, используя Before/After Targets для ввода целей в предопределенный поток сборки.

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

Смежные вопросы