Почему мы получаем это исключение InvalidProjectFileException при использовании библиотеки Microsoft.Build?

#c# #automation #msbuild #nuget

Вопрос:

Меня попросили выяснить, почему наш процесс сборки завершается неудачно, когда он выполняется на компьютере, на котором установлена Visual Studio 2022 (версия 17.0.0 Preview 3.1). Я не очень хорошо знаком с пакетами C#, MSBuild или NuGet, поэтому, возможно, задаю бессмысленный вопрос! Пожалуйста, наберитесь терпения.

Наше приложение для сборки C# пытается создать экземпляр Microsoft.Build.Execution.ProjectInstance , как показано ниже:

var pi = new ProjectInstance(projectFile, BuildProperties, null);

Где «Файл проекта» — это расположение XML-скрипта для MSBuild. Но этот вызов вызывает следующее исключение:

Microsoft.Build.Exceptions.InvalidProjectFileException: 'The tools version "Current" is unrecognized. Available tools versions are "2.0", "3.5", "4.0".

Если я попытаюсь изменить аргумент null на «16.0», «17.0» или «Текущий», я получу варианты одного и того же исключения.

(Если я попытаюсь использовать msbuild.exe прямо говорится, что это «Майкрософт (Р) строить Engine версия 17.0.0-предварительный просмотр-21380-01 b6e7d6051 для .Чистая рамки», хотя я признаю, что это может быть отвлекающим маневром, так как мы автоматизации в MSBuild, не выполняется msbuild.exe непосредственно, так что извинения, если это не имеет никакого отношения.)

У меня есть последние пакеты NuGet Microsoft.Build (v16.11.0), на которые ссылается проект приложения для сборки. Я замечаю, что пакетов v17 (пока) нет.

Делаем ли мы здесь что-то в корне неправильное? Почему мы получаем это исключение? Кажется необычным, что в сообщении об исключении говорится, что единственными инструментами являются действительно низкие номера версий. Я бы ожидал, что он скажет, что версия инструмента больше похожа на 16, 17 и т. Д., Но не «2.0»! Аргумент ToolsVersion в ProjectInstance конструкторе связан с версией пакетов NuGet (16.11) или с версией MSBuild, установленной с VS2022 (предварительный просмотр 17.0), или с чем-то совершенно другим!?

Вся помощь очень ценится. Если я плохо сформулировал вопрос или вам нужна дополнительная информация для помощи, пожалуйста, спросите.

Комментарии:

1. Вы решили эту проблему?

2. @Zolomon, боюсь, что нет. Меня попросили только бегло взглянуть, чтобы понять, будет ли наш процесс сборки «просто работать» с VS2022. Поскольку это было предварительное издание, я не был полностью удивлен, что оно не сработало. Эти низкие цифры в исключении бросили меня, хотя я до сих пор не знаю, откуда они взялись. Как видите, на этот вопрос нет ответов, так что он все еще остается загадкой.