Как заставить MSBuild .proj сбоить информативно, если инструменты MSBuild слишком рано - PullRequest
0 голосов
/ 11 июля 2019

У меня есть файл MSBuild .proj, который выполняется разными людьми на разных машинах обычным способом, например msbuild.exe thingummy.proj Проекты C #, которые он компилирует, включают в себя функции .Net 4.5, так что если вы компилируете его с ранним MSBuild, который выполняет Я не знаю, что будет позже .Nets, вы получите сообщения типа «Invalid token '=' в объявлении класса, структуры или интерфейса», которые хорошо документированы в других местах. (например, Недопустимые ошибки токена при использовании MSBuild через командную строку, но не в Visual Studio )

Немедленное исправление - обновить MSBuild до последней версии и убедиться, что вы используете ту версию MSBuild, которую вы считаете. Но было бы доброжелательно к пользователям, если вместо получения заумного сообщения «Invalid token ...» (что немного «пойди разберись ...»), вместо этого было сказано что-то вроде «MSBuild v16 или более поздней версии (твой v4.7) "или что-то в этом роде.

Итак, я ищу параметр MinimumMSBuildVersionRequired или что-то подобное, чтобы поместить его в начало моего файла msbuild thingummy.proj, чтобы в начале процесса сборки MSBuild проверял, что MSBuild работает этот скрипт достаточно новый. Я просмотрел все, но не могу найти подходящего кандидата для этого.

Есть ли такой параметр, который я могу установить в моем .proj MSBuild скрипте? Или какой-то другой обходной путь для выдачи информативных сообщений при работе с неадекватной версией MSBuild?

1 Ответ

0 голосов
/ 11 июля 2019

ОК, благодаря вкладу @pavelanikhouski, это работает:

В верхней части моего сценария я добавляю следующее:

<Project InitialTargets="MyInitialChecks" ...

'InitialTargets' магическое (должно бытьименно это).«MyInitialChecks» - это то, что я выбираю в качестве имени моей цели проверки.

И затем я добавляю цель проверки, которая выглядит следующим образом:

<Target Name="MyInitialChecks" >
    <Error Condition="$(MSBuildToolsVersion) &lt; 15.0" 
        Text="The version of MSBuild being used for this build (v$(MSBuildToolsVersion)) is too early. v15.0 or later is required." />
</Target>

Это делает до и включая VisualStudio 2017 и MSBuildToolsVersion v15.0.

Как отметил Павел, все ставки отключены, когда дело доходит до VS2019, потому что это больше не сообщает MSBuildToolsVersion.См https://developercommunity.visualstudio.com/content/problem/404485/vs2019-msbuildtoolsversion-is-not-a-version.html

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