2009-03-06 2 views
14

Mi sono imbattuto nello scenario improbabile quando faccio riferimento a due assembly esterni che hanno entrambi lo stesso spazio dei nomi e nomi di tipo. Quando provo a usare il tipo, il compilatore genera un errore che non può risolvere quale voglio usare.Come ottenere l'operatore alias dello spazio dei nomi :: per lavorare in C#?

Vedo che C# offre un meccanismo per utilizzare alias per i riferimenti. È anche possibile specificare questi alias tramite la finestra Property di un riferimento in Visual Studio 2008. Come si utilizza questo alias nel mio codice? A quanto ho capito, dovrei usare l'operatore ::, ma non riesce con il seguente errore:

CS0432 - Alias not found

Il solito . operatore non pure.

Nella finestra di output vedo che il compilatore ottiene l'alias passato correttamente nella sua riga di comando.

Qualsiasi suggerimento su ciò che potrei provare dopo, è molto apprezzato.

+0

puoi espandere su questo? Funziona se si digita l'intero spazio dei nomi – Grzenio

risposta

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

Questo può essere utilizzato per un metodo di aggiramento attorno a CS0433 (errore del compilatore C#). http://msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx – RandomNickName42

+0

Ho appena notato, è un numero di errore dalla domanda "Gortok" qui, divertente. – RandomNickName42

+2

Inoltre, è necessario modificare la proprietà di riferimento dell'assieme "Alias" da "global" a "global, alias1". – Spiralis

3

Prova questo:

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; 
     } 
    } 
} 

E aggiungere global,asm1 al riferimento di progetto per Assembly1 e global,asm2 per assembly2

3

Penso che è necessario utilizzare un extern alias. Anson Horton ha un buon blog su questo problema e su come utilizzare l'alias extern per risolverlo.

-1

Quando si fa riferimento ad alcuni assiemi nel progetto, l'alias predefinito è "globale". Quando aggiungi un altro alias per quell'assieme, ad es. "Globale, AssemblyA", si farà riferimento in questo modo:

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

o: ". Il solito operatore non così"

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