Question

Ainsi, (apparemment) à l'improviste, mon projet commence à recevoir l'avertissement du compilateur 1685:

  

Le type prédéfini   'System.Runtime.CompilerServices.ExtensionAttribute'   est défini dans plusieurs assemblages dans   l'alias global; en utilisant la définition   à partir de 'c: \ Program Files \ Reference   Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll '

Perplexe, j’ai cherché dans l’article MSDN pour en déterminer la cause. Voici les informations que j'ai trouvées:

  

Référence Visual C #: Erreurs et   Avertissements Avertissement du compilateur (niveau 1)   CS1685

     

Message d'erreur Le type prédéfini   'Nom de type de système' est défini dans   plusieurs assemblées dans le global   alias; en utilisant la définition de 'Fichier   Nom '

     

Cette erreur se produit lorsqu'un fichier prédéfini   type de système tel que System.int32 est   trouvé dans deux assemblées. Une façon cette   peut arriver est si vous faites référence   mscorlib de deux endroits différents,   comme en essayant d'exécuter the.Net   Les versions de framework 1.0 et 1.1   cote à cote.

     

Le compilateur utilisera la définition   d'une seule des assemblées. le   le compilateur recherche uniquement les alias globaux,   ne recherche pas les bibliothèques définies   /référence. Si vous avez spécifié   / nostdlib, le compilateur va chercher   pour Object, et à l'avenir commencer   toutes les recherches de types prédéfinis dans   le fichier où il a trouvé Object.

Maintenant, je me gratte vraiment la tête.

  1. Je ne cours pas deux fois versions du .NET Framework (sauf si vous comptez 2.0 et 3.5).

  2. Je ne fais référence à aucune bizarre assemblées qui pourraient me faire méfiant.

  3. Je ne me souviens pas avoir modifié ma candidature de manière à provoquer ce changement.

  4. J'ai vérifié que tous les composants ciblent la version 2.0.50727 du .NET Framework.

Je suis ouvert aux suggestions ou idées sur la façon de corriger ceci. Je considère les avertissements comme des erreurs et cela me rend fou.

Ce qui me dérange vraiment, c’est que je ne sais pas pourquoi cela se produit. Les choses qui se passent devraient avoir une cause discernable, et je devrais savoir pourquoi elles se sont produites. Si je ne peux pas l'expliquer, je ne peux pas y remédier avec précision. Les devinettes ne sont jamais satisfaisantes.

L’application est simple et consiste en une bibliothèque de classes et une application de formulaires Windows.

  • Une DLL de bibliothèque de classe C # fournissant des fonctionnalités de base encapsulant l’accès à la base de données. Cette DLL fait référence aux composants suivants:

    • Système
    • System.Core
    • System.Core.Data
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq
  • Une application Windows Forms C # fournissant l'interface utilisateur. Cette application fait référence aux composants suivants:

    • CleanCode
    • CleanCodeControls (ces deux solutions fournissent un support pour l'éditeur de syntaxe et sont construites localement avec .NET 3.5).
    • LinqBridge
    • Roswell.Framework (la bibliothèque de classes ci-dessus)
    • Système
    • System.Core
    • System.Data
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Deployment
    • System.Design
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq

Faites-moi savoir si vous avez besoin d'informations supplémentaires et je les fournirai avec plaisir.

Était-ce utile?

La solution

LINQBridge me rend immédiatement suspect. L'intention de ceci est de fournir des attributs / méthodes d'extension etc. pour les utilisateurs 2.0. Si vous avez la version 3.5 (System.Core.dll), n'utilisez pas LINQBridge. Si vous avez besoin de LINQBridge dans la version 3.5 pour une raison obscure (et je ne peux pas en penser à une), vous devrez peut-être utiliser un alias externe. Mais je crains vraiment que vous en ayez besoin!

Autres conseils

Un autre moyen simple de vérifier: Dans votre code, utilisez temporairement la classe quelque part. Exemple:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

Lors de la construction, cela générera une erreur:

  

Le type 'System.Runtime.CompilerServices.ExtensionAttribute' existe   dans les deux 'c: \ Program Files \ Reference   Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll 'et .....

Et vous montrer immédiatement les 2 sources à l'origine du conflit.

Marc a presque certainement raison. Voici un moyen de vérifier

  1. Ouvrez Reflector.exe
  2. Ajouter tous les assemblys non-système
  3. F3 et recherchez ExtensionAttribute

S'il apparaît ailleurs que dans System.Core, vous savez d'où il vient.

Une autre solution à ce problème consiste à utiliser un alias global pour l’ensemble de l’assemblée:

Référence - > Propriétés - > Alias ??- > Remplacez 'global' par autre chose

FYI: J'ai eu le même problème et j'ai pu le résoudre en utilisant l'option "Optimiser les références" de Resharper. commande, puis en supprimant toutes les références inutilisées. Pas tout à fait sûr pourquoi cela a fonctionné, mais cela a fonctionné.

Une autre solution à ce problème = > Projet de clic droit - > Propriétés - > Construire - > Traiter les avertissements comme des erreurs - > Aucun

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top