Home > Software engineering >  NETSDK1045: The current .NET SDK does not support 'newer version' as a target
NETSDK1045: The current .NET SDK does not support 'newer version' as a target

Time:11-21

I've created a simple ASP.NET CORE 6 Web API. I then pushed it to Github. When I try to create a pipeline in Azure Devops, I'm getting the error.

C:\Program Files\dotnet\sdk\5.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET
   .TargetFrameworkInference.targets(141,5): error NETSDK1045: The current .NET SDK does not support 
   targeting .NET 6.0.  Either target .NET 5.0 or lower, or use a version of the .NET SDK that supports 
   .NET 6.0.

I've just downloaded VS 2022 community edition. I've installed .Net SDK 6. Here's my csproj file

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
  </ItemGroup>

</Project>

I chose what Azure devops suggested, so this is my yml file

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

 trigger:
  - master

 pool:
    vmImage: 'windows-latest'

 variables:
    solution: '**/*.sln'
    buildPlatform: 'Any CPU'
    buildConfiguration: 'Release'

 steps:
    - task: NuGetToolInstaller@1

    - task: NuGetCommand@2
      inputs:
        restoreSolution: '$(solution)'

    - task: VSBuild@1
      inputs:
      solution: '$(solution)'
      msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package 
        /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true 
        /p:PackageLocation="$(build.artifactStagingDirectory)"'
        platform: '$(buildPlatform)'
        configuration: '$(buildConfiguration)'

   - task: VSTest@2
       inputs:
         platform: '$(buildPlatform)'
         configuration: '$(buildConfiguration)'

I've followed what's said in this documentation, but it's not working. The build is still failing like this

[![enter image description here][2]][2]

Thanks for helping

CodePudding user response:

After reading this 2 links, it there were 2 issues with the template from Azure devops.

  1. the restore packages kept on looking for SDK 5. So this task fixed the issue. I've to include a step that mentions SDK 6. https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/package/nuget?view=azure-devops
  2. also it kept on targeting Visual Studio 2019, which doesn't support .NET 6.0.x. Therefore, instead of vmImage: 'windows-latest', using vmImage: 'windows-2022' allow the build to succeed https://github.com/dotnet/core/issues/6907.

This is how the yml file looks like now.

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspne
trigger:
 - master

pool:
   vmImage: 'windows-2022'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
 - task: NuGetToolInstaller@1

 - task: UseDotNet@2
   displayName: 'Use .NET Core sdk'
   inputs:
     packageType: 'sdk'
     version: '6.0.x'
     includePreviewVersions: true

 - task: NuGetCommand@2
    inputs:
      restoreSolution: '$(solution)'

 - task: VSBuild@1
     inputs:
       solution: '$(solution)'
       msbuildArgs: '/p:DeployOnBuild=true 
      /p:WebPublishMethod=Package /p:PackageAsSingleFile=true 
      /p:SkipInvalidConfigurations=true 
      /p:PackageLocation="$(build.artifactStagingDirectory)"'
      platform: '$(buildPlatform)'
      configuration: '$(buildConfiguration)'

     - task: VSTest@2
       inputs:
       platform: '$(buildPlatform)'
       configuration: '$(buildConfiguration)'

Also it seems like the template has changed.

CodePudding user response:

I chose what Azure devops suggested, so this is my yml file

Unfortunately it's easy to confuse things, since Microsoft's naming is anything but consistent. You need to use .NET Core guide for this: Build, test, and deploy .NET Core apps

To save you time, here is a simple YAML pipeline to build ASP.NET Core applications:

trigger:
  branches:
    include:
      - master

# Setup pipeline-level variables to keep things DRY
variables:
  configuration: Release
  projects: '**/*.csproj'
  publish_dir: $(Build.ArtifactStagingDirectory)
  vm_image: ubuntu-latest

stages:
  - stage: Build
    jobs:
      - job: dotnet
        displayName: .NET

        pool:
          vmImage: $(vm_image)

        # Run builds in latest .NET 6 SDK container (Debian 11)
        # This simplifies things and allows to easily target different SDKs:
        # https://hub.docker.com/_/microsoft-dotnet-sdk
        container: mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim

        workspace:
          clean: all

        # Build tasks a separated (restore/build/test/publish)
        # to make it easier to catch/debug issues
        steps:
          - task: DotNetCoreCLI@2
            displayName: .NET | Restore [$(configuration)]
            inputs:
              command: restore
              projects: $(projects)

          - task: DotNetCoreCLI@2
            displayName: .NET | Build [$(configuration)]
            inputs:
              command: build
              projects: $(projects)
              arguments: --configuration $(configuration) --no-restore

          - task: DotNetCoreCLI@2
            displayName: .NET | Test [$(configuration)]
            inputs:
              command: test
              projects: $(projects)
              publishTestResults: true
              arguments: --configuration $(configuration) --no-restore --no-build

          - task: DotNetCoreCLI@2
            displayName: .NET | Publish [$(configuration)]
            inputs:
              command: publish
              publishWebProjects: true
              zipAfterPublish: true
              modifyOutputPath: true
              arguments: --configuration $(configuration) --output $(publish_dir) --no-restore --no-build

          # Publish zipped build results so they can be downloaded from the pipeline UI
          - publish: $(publish_dir)
            displayName: Artifact | Publish
            artifact: $(Build.DefinitionName)
  • Related