Ошибка задания MSBuild на TFS 2018 с неверным. net Путь SDK - PullRequest
0 голосов
/ 08 января 2020

У меня есть задача MSBuild для создания сервисного проекта fabri c на TFS 2018 [On-Premises]. Решение прекрасно собирается локально с использованием Visual Studio 2019 и MSBuild. В агенте сборки TFS происходит сбой с ошибкой ..

Ошибка NETSDK1045: текущий. NET SDK не поддерживает таргетинг. NET Core 3.1. Либо target. 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 ]

1 голос
/ 22 января 2020

мы использовали выделенный пул do tnet с установленной только сборкой VS 2019. Теперь работает. Похоже, что если у нас VS 2017 и VS 2019 на одном агентском компьютере, он собирает средства сборки VS 2017, что приводит к сбою сборок VS 2019.

0 голосов
/ 09 января 2020

На агенте сборки 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 в раскрывающемся списке:

enter image description here

Иногда вам может потребоваться переустановить или восстановить . net core 3.1.100 sdk .

2.Для сборки: вы можете добавить использование . net основное задание перед другими заданиями в сборке.

enter image description here

enter image description here

Укажите эта задача для использования 3.1.100 версии, а затем последующие задачи (задача MSBuild) также будут использовать эту версию.

Примечание : Use .net core task потребуется несколько минут для загрузки и установки указанной. net ядро ​​SDK. Поэтому рекомендуется настроить sdk вручную в локальном агенте. Надеюсь, это поможет:)

...