Od 17 listopada dostępna jest nowa wersja .NET Core 1.1. Wraz z nią pojawiły się nowe wersje ASP.NET oraz EntityFrameworka. Przyszedł, więc czas na aktualizację aplikacji do najnowszego środowiska. Proces ten powinien przebiegać bezboleśnie, ale nie do końca. W moim przypadku miałem problemy z dwoma elementami, co spowodowało, że aplikacja nie wystartowała od razu po aktualizacji.

Przed przystąpieniem do aktualizacji należy ściągnąć najnowszą wersją pakietów – zarówno SDK, jak i Runtime. Pakiety do ściągnięcia dostępne są na stronie .NET Core Downloads.

Optymistycznie myślałem, że wystarczy zaktualizowanie pakietów NuGetem i już.

Tymczasem aplikacja po tym zabiegu już nie wstała, a nawet przestała się kompilować. Pojawiły się następujące błędy:

  • 1. The project has not been restored or restore failed – run `dotnet restore`
  • 2. The project does not list one of 'win10-x64, win81-x64, win8-x64, win7-x64′ in the 'runtimes’ section.
  • 3. You may be trying to publish a library, which is not supported. Use `dotnet pack` to distribute libraries.
  • Can not find runtime target for framework ’.NETCoreApp,Version=v1.0′ compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64′.

Uruchomienie komendy dotnet restore nic nie pomogło – lista błędów wyglądała cały czas tak samo.

project.json

Naprawa błędów polega na edycji dwóch plików. Zacznijmy od project.json. Aktualizacja bibliotek powoduje usunięcie jednego wpisu z tego pliku. Plik ten po aktualizacji wygląda w następujący sposób:

{
  "dependencies": {
    "Microsoft.AspNetCore.Mvc": "1.1.1",
    "Microsoft.AspNetCore.Routing": "1.1.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.1.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.1.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.1.0",
    "Microsoft.Extensions.Configuration.Json": "1.1.0",
    "Microsoft.Extensions.Logging": "1.1.0",
    "Microsoft.Extensions.Logging.Console": "1.1.0",
    "Microsoft.Extensions.Logging.Debug": "1.1.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0",
    "Microsoft.NETCore.App": "1.1.0"
  }

Musimy w nim poprawić wpis dotyczący Microsoft.NETCore.App. Zmieniamy go na:

"Microsoft.NETCore.App": {
  "version": "1.1.0",
  "type": "platform"},

W pliku tym powinniśmy również zmienić wpis:

"frameworks": {
  "netcoreapp1.0": {
    "imports": [
      "dotnet5.6",
      "portable-net45+win8"
    ]
  }
} 

na:

"frameworks": {
  "netcoreapp1.1": {
    "imports": [
      "dotnet5.6",
      "portable-net45+win8"
    ]
  }
}

W tym momencie nasza aplikacja powinna już poprawnie się skompilować i wystartować. Ale to jeszcze nie wszystko.

global.json

W pliku global.json znajdują się informacje dotyczące wersji SDK. Pomimo aktualizacji, wskazuje on cały czas na poprzednią wersję SDK:

{
  "projects": ["src", "test" ],
  "sdk": {
    "version": "1.0.0-preview2-003131"
  }
}

Musimy więc ten plik również zaktualizować:

{
  "projects": ["src", "test"],
  "sdk": {
    "version": "1.0.0-preview2-1-003177"
  }
}

Dopiero w tym momencie nasza aplikacja została poprawnie zaktualizowana do ASP.NET Core 1.1.