Comment faire en sorte que l'opérateur d'alias d'espace de nom :: fonctionne sous C #?

StackOverflow https://stackoverflow.com/questions/619104

  •  03-07-2019
  •  | 
  •  

Question

Je me suis heurté au scénario improbable lorsque je fais référence à deux assemblys externes qui ont tous deux le même espace de nom et les mêmes noms de type. Lorsque j'essaie d'utiliser le type, le compilateur génère une erreur indiquant qu'il ne peut pas résoudre celui que je souhaite utiliser.

Je vois que C # offre un mécanisme permettant d’utiliser des alias pour les références. Vous pouvez même spécifier ces alias via la fenêtre Property d'une référence dans Visual Studio 2008. Comment utiliser cet alias dans mon code? Si j'ai bien compris, je devrais utiliser l'opérateur :: , mais il échoue avec l'erreur suivante:

  

CS0432 - Alias ??introuvable

L'opérateur habituel . échoue également.

Dans la fenêtre de sortie, je vois que le compilateur obtient le pseudonyme passé correctement dans sa ligne de commande.

Tous les indicateurs de ce que je pourrais peut-être essayer ensuite sont grandement appréciés.

Était-ce utile?

La solution

extern alias alias1;
using alias1::Namespace;

Autres conseils

Essayez ceci:

extern alias asm1;
extern alias asm2;

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            asm1.MyNs.MyClass mc1 = null;
            asm2.MyNs.MyClass mc2 = null;
        }
    }
}

Et ajoutez global, asm1 à la référence du projet pour assembly1 et global, asm2 pour assembly2

Je pense que vous devez utiliser un alias externe . Anson Horton a un bon blog sur ce problème et comment utiliser alias externe pour y remédier.

Lorsque vous faites référence à un assemblage dans un projet, son alias par défaut "global". Lorsque vous ajoutez un autre alias pour cet assemblage, par exemple "global, AssemblyA", vous le référencerez comme suit:

using SomeTypeAlias = AssemblyA::Company.Product.SomeType;

ou:

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top