2017-05-27 21 views
6

我试图在.NET核心类库使用IdentityModel包,但我得到netstandardSystem.Net.Http之间的冲突:如何解决的HttpClient存在于多个库

error CS0433: The type 'HttpClient' exists in both 
'System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' and 
'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 

项目文件:

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <TargetFramework>netstandard2.0</TargetFramework> 
    </PropertyGroup> 
    <ItemGroup> 
    <PackageReference Include="IdentityModel" Version="2.8.1" /> 
    </ItemGroup> 
</Project> 

默认Class1.cs

using System; 
using System.Net.Http; 
namespace Test 
{ 
    public class Class1 
    { 
     HttpClient client = new HttpClient(); 
     public Class1() {} 
    } 
} 

解决此问题的正确方法是什么?

+0

它是运行时错误? –

+0

不,如果它们位于不同的名称空间中,它的编译时间是'dotnet build' –

+0

,那么如何在类名前面添加名称空间? –

回答

0

我最近尝试在Xamarin项目中使用HttpClient时遇到类似问题。为了解决这个问题,我添加了一个配置文件并将其重定向到System.Net.Http的特定版本。这同样适用于你,但你必须选择你想要使用的版本“2.0.0.0”和“4.1.1.1”。 app.config的内容:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.1.1.1" newVersion="4.1.1.1" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 
+0

我不确定这是同一个问题?有没有冲突的库,每个都有System.Net.Http.HttpClient?另外我正在尝试为nuget创建一个类库。不确定app.config如何适合该场景。 –

+0

我与版本4.1.1.1和旧版本(不记得)有冲突,所以我不能使用HttpClient并且无法编译。我不确定它是否适用于图书馆。 –

+0

仍然收到相同的错误。 – Shimmy

0

这不是一个答案,但肮脏的解决方法。希望能帮助某人解决实际问题。

  1. 全球定位NuGet包位置

    dotnet nuget locals all -l

    在我的机器它位于C:\Users\{user}\.nuget\packages\

  2. 编辑{package-location}\IdentityModel\2.8.1\identitymodel.nuspec。 将目标框架修改为参考文献.netstandared2.0而不是.netstandared1.4,并根据.netstandard2.0目标框架删除或注释掉<dependency id="System.Net.Http" version="4.3.2" exclude="Build,Analyzers" />行。

    <group targetFramework=".NETStandard2.0"> 
        <dependency id="NETStandard.Library" version="1.6.1" exclude="Build,Analyzers" /> 
        <dependency id="Newtonsoft.Json" version="9.0.1" exclude="Build,Analyzers" /> 
        <!--<dependency id="System.Net.Http" version="4.3.2" exclude="Build,Analyzers" />--> 
        <dependency id="System.ValueTuple" version="4.3.1" exclude="Build,Analyzers" /> 
        <dependency id="System.Security.Claims" version="4.3.0" exclude="Build,Analyzers" /> 
        <dependency id="System.Security.Cryptography.Algorithms" version="4.3.0" exclude="Build,Analyzers" /> 
        <dependency id="System.Security.Cryptography.X509Certificates" version="4.3.0" exclude="Build,Analyzers" /> 
    </group> 
    
  3. dotnet restore

  4. dotnet build

现在样品应该建立。

+0

显然这已在'IdentityModel'的最新版本中得到修复,但对于其他有问题的软件包仍然很有用。 – Shimmy

相关问题