Получите правильный $ (VisualStudioVersion) для VS 2017 внутри файла MSBuild - PullRequest
3 голосов
/ 19 марта 2019

У меня есть файл MSBuild для публикации решения (созданного в VS 2013 и перенесенного в VS 2017) на удаленный сервер. Это оскорбительная строка:

<PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup> 

Когда я запускаю команду:

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\msbuild" WebSite1_Web_configs.build /p:Configuration=Integracion;Platform="AnyCPU" /p:VisualStudioVersion=15.0

После некоторой компиляции она заканчивается с этой ошибкой:

Error MSB4062 The "TransformXml" task could not be loaded from the assembly C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll

Конечно, его нельзя загрузить, потому что версия должна быть 15.0, а не 12.0.

Вещи, которые я пробовал:

  • Добавление /p:VisualStudioVersion=15.0 к команде, где я вызываю MSBuild. Это не работает.

  • Изменение внутри файла *. Csproj элемента:

<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Для:

<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Это не работает.

Итак, как я могу получить правильную версию VS с $(VisualStudioVersion) внутри файла MSBuild без необходимости его жесткого кодирования?

1 Ответ

3 голосов
/ 19 марта 2019

Хорошо, проблема была в том, что у меня было <Import> элементов в конце файла * .build.В одном из этих импортов часть пути была жестко закодирована:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" />

Я изменил его на:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />

Я выполнил MSBuild с параметром /p:VisualStudioVersion=15.0, и он работал.

Пожалуйста, если у вас возникла та же проблема, проверьте, есть ли импорт с жестко закодированными путями .

...