2
votes

Visual Studio: [CS0433] type Func existe à la fois dans et

J'ai eu pas mal de problèmes avec Visual Studio ces derniers temps, mais je ne peux tout simplement pas résoudre celui-ci. En essayant de reconstruire mon projet, j'obtiens:

Erreur CS0433: Le type 'Func' existe à la fois dans 'System.Core, Version = 3.5.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' et 'mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 '

La seule chose qui semblait fonctionner était d'ajouter manuellement une référence au fichier csproj.

<dependentAssembly>
    <assemblyIdentity name="System.Core" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="3.5.0.0" newVersion="4.0.0.0" />
</dependentAssembly>

Ce qui me laisse avec une nouvelle erreur: p>

Erreur CS1703: plusieurs assemblys avec une identité équivalente ont été importés: 'C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll' et 'C: \ WINDOWS \ Microsoft .Net \ assembly \ GAC_MSIL \ System.Core \ v4.0_4.0.0.0__b77a5c561934e089 \ System.Core.dll '. Supprimez l'une des références en double.

Désormais, la référence 3.5.0.0 n'est pas trouvée dans le projet mais peut être vue dans l'Explorateur d'objets sans option pour la supprimer:

 Object Browser p >

Dans un fichier app.config, j'ai également essayé de rediriger la référence vers la version la plus récente:

<Reference Include="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>

Ce qui ne change rien.

J'apprécierais toute idée ou contribution car je cherche et me débat avec cela depuis plus d'une semaine.


7 commentaires

Et si vous essayez simplement d'utiliser la version la plus récente plutôt que de rediriger? Il semble probable qu'il soit passé de l'un à l'autre entre 3,5 et 4,0.


Vérifiez également votre plate-forme cible. on dirait que vous essayez de construire des trucs 4.0 sur 3.5


Ce ne sont pas simplement des assemblées. Ce sont des fichiers runtime . D'une manière ou d'une autre, quelque part votre code fait référence à un assembly créé pour le runtime .NET 3.5. Vous devriez les remplacer par des versions plus récentes - .NET 4.0 est sorti en 2010. Il est fort probable que l'auteur de cet assembly ait publié une version mise à jour depuis, ou l'a complètement abandonnée


Utilisez-vous peut-être des assemblys Windows Workflow ou WPF obsolètes? Utilisez-vous une ancienne bibliothèque tierce pour vous connecter à un service distant? .NET 3.5 est le runtime .NET 2.0 avec l'ajout de WF, WPF et WCF. Tous ceux-ci ont été mis à niveau dans .NET 4.0 et versions ultérieures afin que vous puissiez trouver une bibliothèque plus récente


@John comment pourrais-je faire ça?


@ vasily.sib où puis-je le vérifier?


@PanagiotisKanavos Où puis-je vérifier où il fait référence à .NET 3.5?


4 Réponses :


0
votes

de deux manières. 1. utilisez "using xxx = ....." 2. écrivez un wrapper de classe pour éviter la référence.


1 commentaires

Comment tout cela aidera-t-il? Un wrapper de classe n'évite pas les références, il en ajoute une autre



0
votes

Vous pouvez définir vos propres délégués:

délégué public T MyFunc (élément T1); délégué public T MyFunc (T1 item1, T2 item2); ...


0 commentaires

1
votes

C'est tellement pénible de comprendre ce problème. Après avoir frappé ma tête pendant des heures, j'ai finalement trouvé le problème avec la version "3.5" de system.core.dll. J'ai donc copié la version "4.0 .." de "system.core.dll" du dossier Program Files (X86) vers mon dossier References ou Bin de l'application. Pour moi, c'était sous (C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.5). Si nécessaire, ajoutez également manuellement une référence au fichier csproj comme indiqué dans la question d'origine. J'espère que cela aide. Soupir :)


1 commentaires

Merci pour votre réponse mais si je me souviens bien, cela n'a pas aidé non plus. J'ai finalement résolu le problème en effaçant l'entrée dans le GAC (Global Assembly Cache).



1
votes

ouvrir le panneau de configuration de Windows> programmes et fonctionnalités> activer ou désactiver les fonctionnalités de Windows et désactiver .Net Framework 3.5. vidéo

cette méthode fonctionne pour moi.


0 commentaires