2017-09-28 6 views
0

J'ai un assez gros projet dans une solution VS 2015 (oui, un seul projet) qui utilise un interne Paquet NuGet (et beaucoup d'espaces de noms dans ce paquet.)Le type 'XXX' existe à la fois dans 'aaa.dll' et 'bbb.dll' concernant les références du paquet NuGet

J'ai un autre paquet (plus récent) NuGet à partir duquel je dois utiliser un seul cours, mais cette classe est en conflit avec l'un des espaces de noms entrés par un (en fait plus) des paquets NuGet existants.

Pour rendre les choses plus amusantes, il y a beaucoup d'autres espaces de noms tirés par le même nouveau paquet, utilisé sur plusieurs autres paquets NuGet.

Après avoir lu ces messages SO/blog sur le sujet de extern alias:

What use is the Aliases property of assembly references in Visual Studio 8. https://blogs.msdn.microsoft.com/ansonh/2006/09/27/extern-alias-walkthrough/ http://geekswithblogs.net/bconlon/archive/2014/12/18/ambiguous-classes-in-c.aspx

Je pensais que je pourrais simplement ajouter le package NuGet nécessaire, changer son alias de global à except (il implique l'exploitation forestière d'exception) et tout devrait maintenant compiler comme avant. Je pensais cela parce que je croyais que n'importe où je n'avais pas explicitement dit d'utiliser un espace de noms à partir des nouvelles DLL apportées par ce paquet continuerait à utiliser les espaces de noms DLL existants.

Cette hypothèse (quelle que soit la méthode apprise) semble incorrecte car j'ai ajouté le package NuGet, modifié l'alias de la DLL et la reconstruction n'a pas fonctionné. De nombreuses erreurs de construction exists in both sont signalées.

Répondre

0

Argh. Il s'avère que les dépendances de la solution (ancienne) étaient des DLL référencées localement et non des paquets NuGet.

La leçon ici: Vérifiez vos références.