1

我有一个 MSBuild 任务来在 TFS 2018 [本地] 上构建一个服务结构项目。该解决方案使用 Visual Studio 2019 和 MSBuild 在本地构建良好。它在 TFS 构建代理上失败并出现错误..

错误 NETSDK1045:当前的 .NET SDK 不支持面向 .NET Core 3.1。以 .NET Core 2.1 或更低版本为目标,或者使用支持 .NET Core 3.1 的 .NET SDK 版本。

我明确将 MSBuild 任务配置为使用“C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\msbuild.exe”

我正在使用具有以下参数的 MSBuild 任务..

/p:Deterministic=true /t:Package /p:PackageLocation=$(build.artifactstagingdirectory)\applicationpackage

TFS Build 代理安装了 Visual Studio 2017 和 2019。它还安装了 .Net 核心 SDK 3.1。[3.1.100 版本]。

由于某种原因,构建输出显示 SDK 正在从“C:\Program Files\dotnet\sdk\2.1.602”中获取。它需要使用来自“C:\Program Files\dotnet\sdk\3.1.100”的SDK

如何强制 MSBuild 任务使用 C:\Program Files\dotnet\sdk\3.1.100 中的 SDK。

我无法将“Nuget 工具安装程序”任务添加到管道中,因为我们的构建代理无法访问互联网​</p>

注意:当我们使用 .net core 2.2 时,该项目在 TFS 中使用 Visual Studio 2017 构建任务中的 MSBuild 构建良好。

我们不得不将其中一个项目升级到 .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>
4

2 回答 2

1

TFS Build 代理安装了 Visual Studio 2017 和 2019。它还安装了 .Net 核心 SDK 3.1。[3.1.100 版本]。

由于某种原因,构建输出显示 SDK 正在从“C:\Program Files\dotnet\sdk\2.1.602”中获取。它需要使用来自“C:\Program Files\dotnet\sdk\3.1.100”的SDK

要查找问题的原因:

在您的 msbuild 任务之前添加一个命令行任务,让它执行dotnet --info命令以输出您构建中使用的真实 sdk 版本。检查它是否使用 3.1.100 版本。

(通常dotnet --info会输出可用的最新 sdk 版本)

可能的解决方法:

1.代理本身:由于.net core SDK 3.1.100支持VS2019 16.4及以上。因此尝试将 TFS 代理中的 VS2019 更新到最新版本,然后在 VS 中右键单击.net core project以检查下拉列表中是否有 3.1:

在此处输入图像描述

有时您可能需要重新安装或修复.net core 3.1.100 sdk

2.对于构建:您可以在构建中的其他任务之前添加使用.net核心任务。

在此处输入图像描述

在此处输入图像描述

指定此任务使用3.1.100版本,然后后续任务(MSBuild 任务)也将使用此版本。

注意Use .net core task下载和安装指定的 .net core sdk 需要几分钟时间。所以更推荐在本地代理中手动配置sdk。希望能帮助到你 :)

于 2020-01-09T06:38:23.690 回答
1

我们使用了一个仅安装了 VS 2019 版本的专用 dotnet 池。它现在正在工作。看起来,如果我们在同一台代理机器上安装 VS 2017 和 VS 2019,它会使用 VS 2017 构建工具,导致 VS 2019 构建失败。

于 2020-01-22T16:20:45.670 回答