2017-09-06 29 views
6

我遇到了一個引用2個包的項目的問題,然後引用Newtonsoft.Json,但在不同的版本。我正在使用RefitMicrosoft.NET.Sdk.Functions的nuget包。當我嘗試構建解決方案我收到以下錯誤:由Microsoft.NET.Sdk.Functions引起的版本衝突

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\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> 

我試圖添加彙編重定向,但似乎忽略了這些。

我也嘗試刪除所有的包和一個仍然將它們重新添加在一個沒有喜悅:

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> 

也沒有什麼神奇的在我的csproj都會響起:

<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> 

任何人有任何想法如何解決這個問題?

+0

您是否嘗試卸載並重新安裝nuget軟件包Refit和Microsoft.NET.Sdk.Functions? – spodger

+0

我有'Refit'但不是'Microsoft.NET.Sdk.Functions',讓我試試 –

+0

剛剛嘗試刪除所有包並將其添加回來,仍然是一樣 –

回答

14

不幸的是,這是Azure Functions MSBuild項目的a known bug。所有發佈版本都對Json.NET 9.0.1有一個硬編碼的依賴關係。唯一的解決方法是降級到1.0.0-alpha6版本。

缺少包概要和說明,以及缺少Github project中的文檔都清楚地表明這是一項正在進行的工作。

假設你需要它,你可以嘗試克隆.csproj的回購change the dependency並重建包。

與此同時,您應該爲issue添加註釋,解釋您也受到影響。

爲了解決這個問題,Line 39 of csproj應該改變來自:

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

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

那裏的Microsoft.Azure.WebJobs

+0

奇怪的是,不是運行'dotnet build',而是運行'MSBuild.exe'它工作... –

-1

在你的app.config,您可以使用重定向程序集版本

簡單地說,你就可以說:「如果你需要一個包使用該名稱,使用一個」

https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/redirect-assembly-versions

In app.config:

<dependentAssembly> 
     <assemblyIdentity name="someAssembly" 
      publicKeyToken="32ab4ba45e0a69a1" 
      culture="en-us" /> 

     <bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" /> 
     </dependentAssembly> 
+1

正如我在問題中所說這不起作用 –

+0

雖然此鏈接可能會回答問題,但最好在此處包含答案的基本部分並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/ review/low-quality-posts/18243147) – Mamun

+0

粘貼鏈接內容 –

0

beta版本等詳細的版本依賴運行到相關的問題,不是能夠安裝Mirosoft.NET.Sdk軟件包。通過使用vs2017創建一個新的Cloud - Azure函數項目解決了這個問題。該項目隨Mirosoft.NET.Sdk包版本1.0.6一起提供。更新到1.0.7實際上起作用。然後安裝牛頓9.0.1。從那裏開始,沒有問題。