Ошибка MSBuild Task на TFS 2018 из-за неправильного пути к SDK .net
У меня есть задача MSBuild по созданию проекта Service Fabric на TFS 2018 [On-Premises]. Решение отлично строится локально с использованием Visual Studio 2019 и MSBuild. Он не работает в агенте сборки TFS с ошибкой..
Ошибка NETSDK1045: текущий пакет SDK для.NET не поддерживает таргетинг на.NET Core 3.1. Либо целевой.NET Core 2.1 или ниже, либо используйте версию.NET SDK, поддерживающую.NET Core 3.1.
Я явно настроил задачу MSBuild на использование "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe"
Я использую задачу MSBuild со следующими параметрами..
/p: Детерминированный =true /t: Пакет /p:PackageLocation=$(build.artifactstagingdirectory)\applicationpackage
В агенте сборки TFS установлены Visual Studio 2017 и 2019. Он также имеет установленный.Net core SDK 3.1. [Версия 3.1.100].
По какой-то причине выходные данные сборки показывают, что SDK загружается из "C:\Program Files\dotnet\sdk\2.1.602". Необходимо использовать SDK из "C:\Program Files\dotnet\sdk\3.1.100"
Как заставить задачу MSBuild использовать SDK из C:\Program Files\dotnet\sdk\3.1.100.
Я не могу добавить задачу "Установщик инструментов Nuget" в конвейер, поскольку наш агент сборки не имеет доступа к Интернету.
ПРИМЕЧАНИЕ. Проект отлично строился с использованием MSBuild из задачи сборки Visual Studio 2017 в TFS, когда мы работали с.net core 2.2.
Нам пришлось обновить один проект до.net core 3.1 и VS 2019, и это сломало сборку в TFS.
Содержание файла SFProj:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets=";ValidateMSBuildFiles">
<Import Project="..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.props" Condition="Exists('..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.props')" />
<PropertyGroup Label="Globals">
<ProjectGuid>3b02cfa3-a4c3-49ea-9186-64ae171d64a7</ProjectGuid>
<ProjectVersion>2.3</ProjectVersion>
<MinToolsVersion>1.5</MinToolsVersion>
<SupportedMSBuildNuGetPackageVersion>1.6.7</SupportedMSBuildNuGetPackageVersion>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<None Include="ApplicationParameters\Local.1Node.xml" />
<None Include="ApplicationParameters\Local.5Node.xml" />
<None Include="PublishProfiles\Local.1Node.xml" />
<None Include="PublishProfiles\Local.5Node.xml" />
<None Include="Scripts\Deploy-FabricApplication.ps1" />
</ItemGroup>
<ItemGroup>
<Content Include="ApplicationPackageRoot\ApplicationManifest.xml" />
<Content Include="ApplicationParameters\Params.xml" />
<Content Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Stateful1.csproj" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" />
<PropertyGroup>
<ApplicationProjectTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets</ApplicationProjectTargetsPath>
</PropertyGroup>
<Import Project="$(ApplicationProjectTargetsPath)" Condition="Exists('$(ApplicationProjectTargetsPath)')" />
<Import Project="..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.targets" Condition="Exists('..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.targets')" />
<Target Name="ValidateMSBuildFiles" BeforeTargets="PrepareForBuild">
<Error Condition="!Exists('..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.props')" Text="Unable to find the '..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.props' file. Please restore the 'Microsoft.VisualStudio.Azure.Fabric.MSBuild' Nuget package." />
<Error Condition="!Exists('..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.targets')" Text="Unable to find the '..\..\packages\Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.6.7\build\Microsoft.VisualStudio.Azure.Fabric.Application.targets' file. Please restore the 'Microsoft.VisualStudio.Azure.Fabric.MSBuild' Nuget package." />
</Target>
</Project>
2 ответа
Мы выбрали выделенный пул dotnet с установленной только сборкой VS 2019. Теперь работает. Похоже, если у нас есть VS 2017 и VS 2019 на одной машине с агентом, он использует инструменты сборки VS 2017, вызывая сбой сборки VS 2019.
В агенте сборки TFS установлены Visual Studio 2017 и 2019. Он также имеет установленный.Net core SDK 3.1. [Версия 3.1.100].
По какой-то причине выходные данные сборки показывают, что SDK загружается из "C:\Program Files\dotnet\sdk\2.1.602". Необходимо использовать SDK из "C:\Program Files\dotnet\sdk\3.1.100"
Чтобы определить причину проблемы:
Добавьте задачу командной строки перед задачей msbuild, позвольте ей выполнитьdotnet --info
команда для вывода реальной версии sdk, используемой в вашей сборке. Проверьте, использует ли он версию 3.1.100.
(Как обычно, dotnet --info
выведет доступную последнюю версию sdk)
Возможные обходные пути:
1.Для самого агента: Т.к. .net core SDK 3.1.100
поддерживает VS2019 16.4 и выше. Поэтому попробуйте обновить VS2019 в агенте TFS до последней версии и щелкните правой кнопкой мыши.net core project
в VS, чтобы проверить, доступен ли 3.1 в раскрывающемся списке:
Иногда вам может потребоваться переустановить или отремонтировать SDK.net core 3.1.100.
2. Для сборки: вы можете добавить основную задачу use .net перед другими задачами в сборке.
Укажите эту задачу, чтобы использовать 3.1.100
версия, а затем последующие задачи (задача MSBuild) также будут использовать эту версию.
Примечание:Use .net core task
загрузка и установка указанного.net core sdk займет несколько минут. Поэтому рекомендуется настраивать sdk вручную в локальном агенте. Надеюсь, это поможет:)