2017-09-06 95 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。从那里开始,没有问题。