Как загружать различные инструменты версий MSBuild во время выполнения?

#c# #.net #msbuild

Вопрос:

Я работаю с приложением, в котором мы используем множество API из пакета Microsoft.Build. В свойствах этого пакета я вижу путь C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.8Microsoft.Build.dll и версию 4.0.0.0

Цель: Я хотел бы использовать более новую версию инструментов сборки без добавления ссылок на эти инструменты сборки в приложение. Я уже сталкивался Microsoft.Build.Locator с тем, что собирает всю информацию об установленных инструментах сборки на машине и может использовать выбранную версию. Но у него есть один недостаток — у него нет резервного механизма.

Например, я хотел бы загрузить/использовать новейшую доступную версию инструментов сборки, и если не установлено ничего более нового, используйте это из GAC. Я играл с Microsoft.Build.Locator API, и из-за моей нетребовательности он может найти только инструменты сборки в версии >= 15.0 Я попытался зарегистрировать версию из GAC следующим способом: > MSBuildLocator.RegisterMSBuildPath(new string[] { @"C:WindowsMicrosoft.NETassemblyGAC_MSIL" }); но я получаю исключение, что инструменты сборки с версией 15 не найдены. Я предполагаю, что это ожидаемое поведение для Microsoft.Build.Locator пакета, если только я не делаю что-то не так.

Итак, вкратце, есть ли что-то еще, что я могу сделать для достижения описанного поведения — > Используйте инструменты сборки из GAC, если только не существует более новой версии, а затем используйте эту более новую версию.