9
votes

BC30560: 'ExtensionAttribute' est ambigu dans l'espace de noms "System.Runtime.Compilerservices"

J'ai un projet ASP.NET (dans .NET 2.0) et j'ai converti le projet en .NET 4.0. Après avoir construit le projet avec succès, j'ai lancé le site Web sur le navigateur, il jette une erreur comme suit:

Erreur de compilation

Description: Une erreur s'est produite lors de la compilation d'une ressource nécessaire pour entretenir cette demande. S'il vous plaît examiner les éléments suivants Détails d'erreur et modifiez votre code source de manière appropriée.

Message d'erreur du compilateur: BC30560: 'ExtensionTtribute' est ambigu dans l'espace de noms 'system.runtime.compilerservices ".

Erreur source:

[aucune ligne source pertinente]

Fichier source: InternexmlHelper.vb Ligne: 9

........

S'il vous plaît donnez-moi une idée de le réparer.


1 commentaires

Avez-vous effectué une copie de sauvegarde de la DLL ancienne dans votre dossier bin?


7 Réponses :


7
votes

Un truc commun pour utiliser des méthodes d'extension (pour Linq, etc.) dans .NET 2 avec le compilateur C # 3 (ou ci-dessus) consistait à définir votre propre extensionTtribue dans l'espace de nom droit.

Maintenant que vous avez mis à niveau vers une version ultérieure de .NET, vous devez supprimer cet attribut supplémentaire maintenant redondant. Trouvez où il est défini dans votre code et de l'expiration. Vérifiez également les bibliothèques externes telles que Linqbridge - vous n'en aurez plus besoin.

Un moyen de trouver qu'il serait d'utiliser le navigateur d'objets et de rechercher une extensionTtribute.


0 commentaires

2
votes

J'ai eu exactement la même erreur et ce qui m'a résolu pour moi était de supprimer les thèmes (sous App_thèmes). Je n'ai pas essayé de ré-ajouter les thèmes pour voir s'ils travailleront encore, mais supprimez cela fixant l'erreur, au moins.

Notez que j'ai découvert que c'était les thèmes qui l'entraînent en consultant les détails du compilateur dans l'erreur et notant que les seuls fichiers .vb qu'il s'agissait de la compilation était lié aux thèmes (générés automatiquement). Mon projet est tout C #, l'erreur venant de VB m'a fait chercher les fichiers .vb.


0 commentaires

0
votes

Cette erreur est également parce que vous n'avez pas la directive page en haut de votre fichier ASPX. C'est pourquoi le compilateur VB est utilisé.

Écrivez ceci dans le haut: P>

<%@ Page Language="C#" %>


0 commentaires

0
votes

J'ai eu cette erreur. Il suffit de redémarrer Visual Studio le rendit parti.


0 commentaires

0
votes

Cette erreur se produit également dans les applications Web ASP.NET MVC si vous utilisez une extension de fichier incorrecte pour vos vues ou vos partiels.

J'avais créé par inadvertance une vue en utilisant une extension incorrecte (.ascx au lieu de .cshtml) et reçu ce message d'erreur.

Changer l'extension à .cshtml corrigé le problème.


0 commentaires

5
votes

C'était comme ça que j'ai trouvé le problème.

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

Lorsque vous construisez, cela générera une erreur:

Le type

'System.RunTime.compilerservices.exTensionAttribute' existe à la fois 'C: \ Fichiers de programme \ Référence Assemblages \ Microsoft \ Framework \ v3.5 \ System.core.dll '

et .....

et vous montrer immédiatement les 2 sources causant le conflit.


1 commentaires

Cela devrait être au sommet. Moyen le plus rapide et le plus simple de trouver la source de problème.



0
votes

J'ai eu ce problème et j'ai énuméré ci-dessous ce qui a fonctionné pour moi.

L'indice était que le message d'erreur mentionne internexmlhelper.vb . Je suis un programmeur C #, alors pourquoi la mention d'un composant VB?

Ce problème peut survenir si vous n'avez pas été explicite sur la langue de compilation de votre page ASPX. Si vous n'avez pas été explicite, IIS compilera dans tout ce qui est défini comme langue par défaut pour ce site. Si vous écrivez dans C #, n'avez pas été explicite sur la langue de compilation et la langue de compilation par défaut dans IIS est C #, puis des jours heureux. Mais si la langue de compilation par défaut dans IIS est définie sur VB (qu'il semble que c'est par défaut), votre page C # va être compilée comme s'il s'agissait de VB et que vous obtenez l'erreur BC30560.

La meilleure solution consiste à être explicite sur la langue de compilation pour vos pages ASPX, en mettant une directive comme celle-ci en haut de chacune de vos pages ASPX: xxx

Alternativement , vous pouvez laisser vos pages ambiguës (aucune directive linguistique) et dire à IIS à utiliser comme langue de compilation par défaut, comme celle-ci:

avec gestionnaire IIS -> Allez regarder la racine de vos sites Web (il sera votre nom de serveur) alors -> dans la section ASP.NET -> Double-cliquez sur l'icône de compilation .NET (bleue flèche bleue) -> Dans la liste des paramètres, sous l'en-tête Général, est un paramètre pour la langue par défaut. -> Définissez ceci sur C #

Vous pouvez également définir la langue par défaut par site Web si vous le souhaitez. Identique que ci-dessus, mais réglez-le pour un site Web sous la racine de la vue d'arborescence IIS à gauche, au lieu de la racine de celui-ci. Notez que si vous définissez votre langue par défaut = C # pour un site Web, ce paramètre est stocké dans la racine web.config de votre site - dans le Section Vous aurez une valeur comme celle-ci: . Si vous supprimez ou écrasez ce paramètre dans votre web.config , il reviendra à tout ce qui est par défaut pour l'instance IIS.


0 commentaires