2009-03-06 6 views
14

Ich bin auf das unwahrscheinliche Szenario gestoßen, wenn ich zwei externe Assemblies referenziere, die beide den gleichen Namespace und Typnamen haben. Wenn ich versuche, den Typ zu verwenden, löst der Compiler einen Fehler aus, den er nicht lösen kann, den ich verwenden möchte.Wie bekomme ich den Namespace-Alias-Operator :: um unter C# zu arbeiten?

Ich sehe, dass C# einen Mechanismus bietet, Aliase für Referenzen zu verwenden. Sie können diese Aliase sogar über das Property-Fenster einer Referenz in Visual Studio 2008 angeben. Wie verwende ich diesen Alias ​​in meinem Code? Wie ich verstehe, soll ich den :: Operator verwenden, aber es funktioniert nicht mit dem folgenden Fehler:

CS0432 - Alias not found

Die üblichen . Betreiber als auch ausfällt.

Im Ausgabefenster sehe ich, dass der Compiler den Alias ​​richtig in seiner Befehlszeile übergeben bekommt.

Alle Hinweise, was ich als nächstes versuchen kann, werden sehr geschätzt.

+0

Kannst du das hier erweitern? Es funktioniert, wenn Sie den gesamten Namespace eingeben – Grzenio

Antwort

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

Dies kann für eine Methode zur Umgehung von CS0433 (C# Compiler-Fehler) verwendet werden. http://msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx – RandomNickName42

+0

Ich habe gerade bemerkt, es ist 1 Fehler Nummer von "Gortoks" Frage hier, lustig. – RandomNickName42

+2

Und Sie müssen auch die Assembly-Referenz-Eigenschaft 'Aliase' von "global" in "global, alias1" ändern. – Spiralis

3

Versuchen Sie folgendes:

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

Und fügen global,asm1 dem Projekt Referenz für Assembly1 und global,asm2 für assembly2

3

Ich glaube, Sie brauchen einen extern alias zu verwenden. Anson Horton hat einen guten Blog zu diesem Problem und wie man externalias verwendet, um es zu beheben.

-1

Wenn Sie eine Assembly im Projekt referenzieren, hat sie den Standardalias "global". Wenn Sie einen weiteren Alias ​​für diese Assembly hinzufügen, z. "Global, AssemblyA", werden Sie es wie folgt verweisen:

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

oder: ". Die üblichen Betreiber nicht auch"

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