2017-05-27 1 views
6

Je suis en train d'utiliser le paquet IdentityModel dans une bibliothèque de classes de base .NET, mais je reçois un conflit entre netstandard et System.Net.Http:Comment résoudre HttpClient existe dans plusieurs libs

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' 

Le fichier de projet:

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

La valeur par défaut Class1.cs:

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

Quelle est la bonne façon de résoudre ce problème?

+0

est-ce une erreur d'exécution? –

+0

Non c'est l'heure de compilation 'dotnet build' –

+0

s'ils se trouvent dans des espaces de noms différents, que diriez-vous d'ajouter des espaces de noms avant le nom de la classe? –

Répondre

0

J'ai récemment rencontré un problème similaire en essayant d'utiliser HttpClient dans un projet Xamarin. Pour résoudre, j'ai ajouté un fichier de configuration et redirigé vers une version spécifique de System.Net.Http. La même chose pourrait fonctionner pour vous mais vous devez choisir la version que vous voulez utiliser "2.0.0.0" vs "4.1.1.1". Contenu de 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

Je ne suis pas sûr que c'est le même problème? Y avait-il des bibliothèques en conflit, chacune avec System.Net.Http.HttpClient? J'essaye aussi de créer une classe lib pour Nuget. Vous ne savez pas comment un app.config correspond à ce scénario. –

+0

J'ai eu des conflits avec la version 4.1.1.1 et une version plus ancienne (ne me souviens pas), donc je ne pouvais pas utiliser HttpClient et ne pouvais pas compiler. Je ne suis pas sûr si cela s'applique à une bibliothèque si. –

+0

Toujours la même erreur. – Shimmy

0

Ce n'est pas une solution mais une solution de contournement. J'espère aider quelqu'un à résoudre le problème.

  1. emplacement du package localisez global NuGet

    dotnet nuget locals all -l

    Sur ma machine, il est situé dans C:\Users\{user}\.nuget\packages\

  2. Modifier le {package-location}\IdentityModel\2.8.1\identitymodel.nuspec. Modifier l'infrastructure cible pour reférer .netstandared2.0 au lieu de .netstandared1.4 et supprimer ou commenter <dependency id="System.Net.Http" version="4.3.2" exclude="Build,Analyzers" /> ligne sous .netstandard2.0 cadre cible.

    <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

Maintenant, l'échantillon doit construire.

+0

Apparemment, cela a été corrigé dans les dernières versions de 'IdentityModel', mais il est toujours bon à savoir pour les autres paquets problématiques. – Shimmy