2009-03-06 7 views
14

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 le même nom de type. Lorsque j'essaie d'utiliser le type, le compilateur renvoie une erreur qu'il ne peut pas résoudre celui que je veux utiliser.Comment obtenir l'alias namespace operator :: pour travailler sous C#?

Je vois que C# offre un mécanisme pour 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 je comprends bien, je devrais utiliser l'opérateur ::, mais il échoue avec l'erreur suivante:

CS0432 - Alias not found

L'opérateur . habituelle échoue aussi.

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

Tout pointeur sur ce que je pourrais essayer est grandement apprécié.

+0

"L'opérateur ne parvient toujours aussi bien." pouvez-vous développer sur celui-ci? Cela fonctionne si vous tapez l'espace de noms entier – Grzenio

Répondre

16
extern alias alias1; 
using alias1::Namespace; 
+0

Cela peut être utilisé pour une méthode de contourner CS0433 (erreur de compilation C#). http://msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx – RandomNickName42

+0

Je viens de remarquer, c'est 1 numéro d'erreur de la question "Gortok" ici, drôle. – RandomNickName42

+2

Et, vous devez également modifier la propriété assembly-reference 'Aliases' de "global" à "global, alias1". – Spiralis

3

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 ajouter global,asm1 à la référence du projet pour Assembly1 et global,asm2 pour Assemblée2

3

Je pense que vous devez utiliser un alias extern. Anson Horton a un bon blog sur ce problème et comment utiliser extern alias pour le résoudre.

-1

Lorsque vous référencez un assemblage dans un projet, il a l'alias par défaut "global". Lorsque vous ajoutez un autre alias pour cet assemblage, par ex. "Globale, AssemblyA", vous comme cette référence:

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

ou:

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... } 
Questions connexes