2009-03-06 10 views
14

同じ名前空間と型名を持つ2つの外部アセンブリを参照すると、ほとんど起こりそうにない状況に遭遇しました。型を使用しようとすると、コンパイラはどちらを使用したいかを解決できないというエラーをスローします。名前空間エイリアス演算子::をC#で動作させるには?

C#は参照にエイリアスを使用するメカニズムを提供しています。 Visual Studio 2008で参照のウィンドウPropertyを介してこれらのエイリアスを指定することもできます。このエイリアスをコード内でどのように使用しますか?私が理解したように、私は::演算子を使用する必要がありますが、それは次のエラーで失敗します。

CS0432 - Alias not found

通常.オペレータが同様に失敗しました。

出力ウィンドウで、コンパイラがエイリアスをコマンドラインで正しく渡したことがわかります。

私が次に試してみることのできる点については、大いに感謝しています。

+0

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

かあなたはこれを拡大できますか? – Grzenio

答えて

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

これは、CS0433(C#コンパイラエラー)の回避策として使用できます。 http://msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx – RandomNickName42

+0

私は気づいた、それはここで、 "Gortokの"質問から1エラー番号、面白いです。 – RandomNickName42

+2

また、アセンブリ参照プロパティ 'Aliases'を「global」から「global、alias1」に変更する必要があります。 – Spiralis

3

これを試してみてください:

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

そしてassembly2

私はあなたが のexternエイリアスを使用する必要があると思う
3

ためassembly1とglobal,asm2のためのプロジェクト参照にglobal,asm1を追加します。 Anson Hortonにはこの問題に関する良いブログがあり、extern aliasを使用して修正する方法があります。

-1

プロジェクトでアセンブリを参照すると、デフォルトの別名「グローバル」が使用されます。そのアセンブリに別のエイリアスを追加すると、 "グローバル、AssemblyA"、あなたはこのようにそれを参照します: "いつものオペレータは、同様に失敗する。"

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... } 
関連する問題