2011-01-06 7 views
3

Essayer de mettre à jour une solution de 2008 à 2010. Et je reçois beaucoup soudainement d'erreurs de référence ambiguës dans la compilation VS 2010.références ambigües dans VS 2010

Il fonctionne très bien en 2008. Est-VS 2010 plus stricte en ce qui concerne la en utilisant des directives?

+1

Avez-vous mis à jour le projet vers .Net 4 lors de la migration? C'est probablement dû à la version des références de framework utilisées. – Lazarus

+0

J'ai essayé les deux! Un test sans mise à niveau .net 4 et une mise à niveau. Même résultat sur les deux! –

+5

Pouvez-vous nous donner un exemple de sortie montrant quelles classes sont ambiguës? –

Répondre

4

J'ai eu un problème similaire. Je ne pense pas que ce soit plus strict, mais plus de coïncidences du nouveau cadre ayant maintenant le même nom de classe que j'utilisais dans les DLL référencées, soit les choses ont été déplacées, soit il y a eu de nouveaux développements dans les DLL existantes.

Il a fallu un certain temps pour fixer l'ensemble du projet, mais les moyens autour d'elle que j'ai trouvés:

Pour utiliser définissent l'emplacement complet des classes

ou

définir un alias:

using CompanyMagic = Core.Company.Magic; 
2

avez-vous des références à deux versions dll différentes du même assemblage dans votre solution?

Par exemple, faites-vous référence "System.dll de dotnet 2" plus "System.dll de dotnet 4"?

0

Il y a un poste tout à fait similaire sur Stackoverflow: Ambiguous reference error in VS2010

De cet article, de Richard:

Il peut y avoir de légères modifications dans les règles de consultation sur la façon dont les différents cas (par exemple identifiant dans l'espace de noms courant a priorité (. comme dans le programme de classe ci-dessus)

Il y a deux options pour désambiguïser:

  1. nous e les identifiants pleinement qualifiés, dans ce qui précède, System.Action ou ConsoleApplication1.Action.
  2. utiliser un alias d'espace de noms pour qualifier complètement l'identifiant sans tant taper:

    utilisant MonAction = MyNamespace.Action;