2016-08-17 13 views
1

Xamarin.Authプロジェクトが破損しました。つまり、ソースコードが正常にコンパイルされていました。また、別のXamarin.Androidの更新が突然破損しました。Visual Studio 2015のインテリセンスとあいまいな名前空間

Mono.Android.dll(Xamarin.Android)がいくつかの名前空間定義によって拡張された後に問題が発生したことが判明しました。 Xamarin.Auth.Android(

namespace Xamarin.Android 
{ 
    public class Class1 
    { 
    } 
} 

namespace Android.OS 
{ 
    public class Class2 
    { 
    } 
} 

は、DLL#2があります:

は、DLL#1(Mono.Android.dll)があります:

は、私は次のように問題を追い詰め.dllファイル):

namespace Xamarin.Auth 
{ 
    //This does not compile. See the problem description below. 
    public class User1 : Android.OS.Class2 
    { 
    } 
} 

インテリセンスは、次のような問題を示しています

CS0234型または名前空間名「OS」の名前空間に存在しないエラー「Xamarin.Android」(あなたはアセンブリ参照が不足している?)

これは、後者の名前空間を変更することで固定することができます。何か他のものへのかglobal::識別子を使用して:

namespace SomeOtherNamespace 
{ 
    //This compiles ok. 
    public class User1 : Android.OS.Class2 
    { 
    } 
} 

namespace Xamarin.Auth 
{ 
    //This compiles ok. 
    public class User1 : global::Android.OS.Class2 
    { 
    } 
} 

質問です:なぜインテリセンスAndroid名前空間の分岐がglobal::Xamarin.Androidとの間で曖昧であるという警告を与えるものではありません0?それの良い方法は何ですか?常にglobal::名前空間識別子を使用しますか?

答えて

1

globalディレクティブを使用すると、コンパイラにルートからネームスペースを評価する必要があります。それ以外の場合は、現在のネームスペースからの相対的な名前空間を評価しようとします。 globalを使用すると、常に完全修飾名前空間名が使用されます。そのため、接頭辞を付けたときに機能します。

別のオプションは、別名を使用することになります。

using AOS = Android.OS; 

namespace Xamarin 
{ 
    public class User1 : AOS.Class2 
    { 
    } 
} 
+0

私は明らかに、これは問題で自分自身を回避示したませんでしたか? –

+0

申し訳ありません。私は逃しました。更新しました。 –

+0

エイリアスのアイデアをありがとう、私はそれを考慮します。名前空間のプロビジョニングをインラインで自動化するときにVisual Studioに常に 'global ::'を挿入させる方法はありますか? –

関連する問題