wake-up-neo.com

Versionskonflikt verursacht durch Microsoft.NET.Sdk.Functions

Ich habe Probleme mit einem Projekt, das 2 Pakete referenziert, die dann auf Newtonsoft.Json verweisen, aber beide in unterschiedlichen Versionen. Ich verwende das Nuget-Paket von Refit und Microsoft.NET.Sdk.Functions. Wenn ich versuche, die Lösung zu erstellen, erhalte ich die folgende Fehlermeldung:

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet build
C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj : error NU1607: Version conflict detected for Newtonsoft.Json. Reference the package directly from the project to resolve this issue. \r
C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj : error NU1607:  noddy.Api (>= 1.0.0) -> Refit (>= 4.0.1) -> Newtonsoft.Json (>= 10.0.3) \r
C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj : error NU1607:  noddy.Api (>= 1.0.0) -> Microsoft.NET.Sdk.Functions (>= 1.0.2) -> Newtonsoft.Json (>= 9.0.1).

Wenn ich jetzt das mache, was es sagt, und das Paket direkt aus meinem Projekt referenziere, bekomme ich beim Erstellen einen weiteren Fehler:

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet add package Newtonsoft.Json
  Writing C:\Users\joebloggs\AppData\Local\Temp\tmp7250.tmp
info : Adding PackageReference for package 'Newtonsoft.Json' into project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
log  : Restoring packages for C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj...
info :   CACHE http://www.myget.org/F/Azure-appservice/api/v2/FindPackagesById()?id='Newtonsoft.Json'
info :   CACHE https://www.nuget.org/api/v2/FindPackagesById()?id='Newtonsoft.Json'
info : Package 'Newtonsoft.Json' is compatible with all the specified frameworks in project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
info : PackageReference for package 'Newtonsoft.Json' version '10.0.3' added to file 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet build
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  noddy.Api -> C:\dev\noddy\noddy-api\src\noddy.Api\bin\Debug\net461\bin\noddy.Api.dll
C:\Users\joebloggs\.nuget\packages\Microsoft.net.sdk.functions\1.0.2\build\netstandard1.0\Microsoft.NET.Sdk.Functions.Build.targets(31,5): error : Could not load file or Assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. [C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj]

Build FAILED.

C:\Users\joebloggs\.nuget\packages\Microsoft.net.sdk.functions\1.0.2\build\netstandard1.0\Microsoft.NET.Sdk.Functions.Build.targets(31,5): error : Could not load file or Assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. [C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:03.05

C:\dev\noddy\noddy-api\src\noddy.Api>

Ich habe versucht, Assembly-Weiterleitungen hinzuzufügen, aber diese werden ignoriert.

Ich habe auch versucht, alle Pakete zu entfernen und sie nach und nach wieder hinzuzufügen.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet remove package refit
info : Removing PackageReference for package 'refit' from project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet remove package Microsoft.NET.Sdk.Functions
info : Removing PackageReference for package 'Microsoft.NET.Sdk.Functions' from project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet remove package Newtonsoft.Json
info : Removing PackageReference for package 'Newtonsoft.Json' from project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet add package Microsoft.NET.Sdk.Functions
  Writing C:\Users\joebloggs\AppData\Local\Temp\tmp1F1B.tmp
info : Adding PackageReference for package 'Microsoft.NET.Sdk.Functions' into project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
log  : Restoring packages for C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj...
info :   CACHE http://www.myget.org/F/Azure-appservice/api/v2/FindPackagesById()?id='Microsoft.NET.Sdk.Functions'
info :   CACHE https://www.nuget.org/api/v2/FindPackagesById()?id='Microsoft.NET.Sdk.Functions'
info : Package 'Microsoft.NET.Sdk.Functions' is compatible with all the specified frameworks in project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
info : PackageReference for package 'Microsoft.NET.Sdk.Functions' version '1.0.2' added to file 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet add package refit
  Writing C:\Users\joebloggs\AppData\Local\Temp\tmp39D7.tmp
info : Adding PackageReference for package 'refit' into project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
log  : Restoring packages for C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj...
info :   CACHE http://www.myget.org/F/Azure-appservice/api/v2/FindPackagesById()?id='refit'
info :   CACHE https://www.nuget.org/api/v2/FindPackagesById()?id='refit'
error: Version conflict detected for Newtonsoft.Json. Reference the package directly from the project to resolve this issue.
error:  noddy.Api (>= 1.0.0) -> Refit (>= 4.0.1) -> Newtonsoft.Json (>= 10.0.3)
error:  noddy.Api (>= 1.0.0) -> Microsoft.NET.Sdk.Functions (>= 1.0.2) -> Newtonsoft.Json (>= 9.0.1).
info : Package 'refit' is compatible with all the specified frameworks in project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
info : PackageReference for package 'refit' version '4.0.1' added to file 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet build
C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj : error NU1607: Version conflict detected for Newtonsoft.Json. Reference the package directly from the project to resolve this issue. \r
C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj : error NU1607:  noddy.Api (>= 1.0.0) -> Refit (>= 4.0.1) -> Newtonsoft.Json (>= 10.0.3) \r
C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj : error NU1607:  noddy.Api (>= 1.0.0) -> Microsoft.NET.Sdk.Functions (>= 1.0.2) -> Newtonsoft.Json (>= 9.0.1).

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet add package Newtonsoft.Json
  Writing C:\Users\joebloggs\AppData\Local\Temp\tmp8B13.tmp
info : Adding PackageReference for package 'Newtonsoft.Json' into project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
log  : Restoring packages for C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj...
info :   CACHE http://www.myget.org/F/Azure-appservice/api/v2/FindPackagesById()?id='Newtonsoft.Json'
info :   CACHE https://www.nuget.org/api/v2/FindPackagesById()?id='Newtonsoft.Json'
info : Package 'Newtonsoft.Json' is compatible with all the specified frameworks in project 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.
info : PackageReference for package 'Newtonsoft.Json' version '10.0.3' added to file 'C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj'.

C:\dev\noddy\noddy-api\src\noddy.Api>dotnet build
Microsoft (R) Build Engine version 15.3.409.57025 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  noddy.Api -> C:\dev\noddy\noddy-api\src\noddy.Api\bin\Debug\net461\bin\noddy.Api.dll
C:\Users\joebloggs\.nuget\packages\Microsoft.net.sdk.functions\1.0.2\build\netstandard1.0\Microsoft.NET.Sdk.Functions.Build.targets(31,5): error : Could not load file or Assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. [C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj]

Build FAILED.

C:\Users\joebloggs\.nuget\packages\Microsoft.net.sdk.functions\1.0.2\build\netstandard1.0\Microsoft.NET.Sdk.Functions.Build.targets(31,5): error : Could not load file or Assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'. The system cannot find the file specified. [C:\dev\noddy\noddy-api\src\noddy.Api\noddy.Api.csproj]
    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:03.05

C:\dev\noddy\noddy-api\src\noddy.Api>

Auch in meinem Csproj läuft nichts Magisches ab:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.2" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="refit" Version="4.0.1" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Configuration" />
  </ItemGroup>
  <ItemGroup>
    <None Update="Host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="proxies.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Hat jemand eine Idee, wie man dieses Problem beheben kann?

21
Kevin Smith

Leider ist dies ein bekannter Fehler des Azure Functions MSBuild -Projekts. Alle Release-Versionen sind stark von Json.NET 9.0.1 abhängig. Die einzige gemeldete Problemumgehung besteht im Downgrade auf die 1.0.0-alpha6-Version. 

Das Fehlen einer Zusammenfassung und Beschreibung der Pakete sowie die fehlende Dokumentation im Github-Projekt sind ein deutliches Zeichen dafür, dass es sich um eine laufende Arbeit handelt.

Wenn Sie davon ausgehen, dass Sie do brauchen, können Sie versuchen, das Repo zu klonen, ändern Sie die Abhängigkeit in .csproj und erstellen Sie das Paket neu. 

In der Zwischenzeit sollten Sie dem issue wahrscheinlich einen Kommentar hinzufügen, um anzugeben, dass auch Sie betroffen sind.

Um dies zu beheben, sollte Zeile 39 von csproj geändert werden von:

<PackageReference Include="Newtonsoft.Json" Version="[9.0.1]" />

zu

<PackageReference Include="Newtonsoft.Json" Version="9.0.1" />

Es gibt andere genaue Versionsabhängigkeiten von Betaversionen von Microsoft.Azure.WebJobs-Paketen

Update November 2018

Die Readme-Datei des Repos wurde am 31. März 2018 mit einem FAQ aktualisiert, in dem erklärt wird, warum die Json.NET-Version gesperrt ist und wie dies zu tun ist:

F: Ich brauche eine andere Newtonsoft.Json-Version. Was mache ich?

A: Fügen Sie Ihrem csproj die gewünschte Version hinzu. Um beispielsweise 11.0.2 zu verwenden, fügen Sie dies Ihrem csproj hinzu

<PackageReference Include="Newtonsoft.Json" Version="11.0.2" />

F: Warum ist Newtonsoft.Json überhaupt gesperrt?

A: Die Version von Newtonsoft.Json ist gesperrt, um mit der von der Funktionslaufzeit verwendeten Version übereinzustimmen

Es gibt eine lange Diskussion zu dem (jetzt gesperrten) Problem, das erklärt, dass das Entsperren der Version Probleme nur bis zur Bereitstellung verzögern würde

29

In Azure lädt die Funktionslaufzeit eine bestimmte Version (derzeit 11.0.1 in Funktionen v2, 9.0.1 in Funktionen v1) von Newtonsoft.Json vor Ihre Funktionsbibliothek wird durch die Warteschlangenbindung geladen.

Alle Problemumgehungen, die angewendet werden, um das Kompilieren zu veranlassen, führen zu einer fürchterlichen Diagnose von Laufzeitfehlern, wenn Sie eine Funktion verwenden, die nicht mit [11.0.1] binär kompatibel ist (z. B. eines der neuen in Version 12 verwendeten Attribute).

1
Andrew Hill

Ich konnte mein Projekt mit Newtonsoft.Json 11.0.2 zum Laufen bringen, indem ich mit .net-Core auf v2 von Azure Functions wechselte:

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
0
Doug Lampe

In einem verwandten Problem liegend konnte das Mirosoft.NET.Sdk-Paket nicht installiert werden. Umgehen Sie dies, indem Sie ein neues Cloud-Azure-Funktionsprojekt mit vs2017 erstellen. Dieses Projekt wird mit der Mirosoft.NET.Sdk-Paketversion 1.0.6 geliefert. Das Aktualisieren auf 1.0.7 funktioniert eigentlich. Dann installierte Newton 9.0.1. Von da an keine Probleme.

0
Paul0515