2014-11-13 36 views
0

我正在開發一個使用Xamarin.Forms的應用程序。我發現我無法得到以下編譯:C# - 爲什麼這些命名空間發生衝突?

namespace Loopback.Sdk.Xamarin.Example.Forms.Android 
{ 
    [Activity (Label = "Loopback.Sdk.Xamarin.Example.Forms.Android.Android", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] 
    public class MainActivity : AndroidActivity 
    { 
     protected override void OnCreate (Bundle bundle) 
     { 
      base.OnCreate (bundle); 

      Xamarin.Forms.Forms.Init (this, bundle); 

      SetPage (App.GetMainPage()); 
     } 
    } 
} 

生成錯誤是:

Loopback.Sdk.Xamarin.Example.Forms/Android/MainActivity.cs(4,4): Error CS0234: The type or namespace name `Forms' does not exist in the namespace `Loopback.Sdk.Xamarin'. Are you missing an assembly reference? (CS0234) (Loopback.Sdk.Xamarin.Example.Forms.Android) 

從空間聲明省略Xamarin解決了這個問題,所以我只能假設我運行進入某種名稱空間衝突。我的問題是爲什麼會發生這種情況,因爲命名空間看起來甚至沒有相同的根目錄?

UPDATE:

我要強調這指甲下錯誤異常的部分:

The type or namespace name `Forms' does not exist in the namespace `Loopback.Sdk.Xamarin'. 

所以或許改寫了一下,爲什麼Loopback.Sdk.Xamarin作爲根命名空間爲Forms的問題,而不僅僅是Xamarin?我該如何解決這個問題?

回答

4

因爲您在名稱空間中使用了Xamarin

Xamarin也是命名空間項,因此它不能決定是否與您的命名空間層次結構或Xamarin圖書館去。

如果您必須在您的命名空間中使用Xamarin,那麼你將有資格到Xamarin命名空間的任何引用,並給它一個替代名稱的參考。

您可以通過將像這樣做: -

using XamarinForms = global::Xamarin.Forms; 

爲例,並使用此等類 -

XamarinForms.Forms.Init(this, bundle); 
+0

我最終使用'使用XForms = Xamarin.Forms.Forms;',但這確實解決了這個問題。 – csvan

0

這是編譯器只是如何解決命名空間。鑑於名稱空間Loopback.Sdk.Xamarin.Example.Forms.Android的存在,這意味着該虛線語法中的所有名稱空間。這與C#允許您使用部分限定類型名稱(即類型名稱與部分但不是全部名稱空間)的事實相結合意味着編譯器與名稱空間的Xamarin部分相匹配,假定Xamarin.Forms是部分當前的命名空間,其中包括Loopback.Sdk.Xamarin。即它假定Xamarin.Forms中的Xamarin實際上是指Loopback.Sdk.Xamarin

爲什麼你完全符合型號名稱Xamarin.Forms.Forms?如果您有using Xamarin.Forms;作爲您的using指令之一,那麼您應該只能在代碼中編寫Forms.Init(),它將起作用。

或者,您可以使用類型別名。例如using Forms = Xamarin.Forms.Forms;。這也可以讓你在你的代碼中寫入Forms.Init()

+0

感謝您的回覆!一些評論:「爲什麼你完全合格的類型名稱Xamarin.Forms.Forms?」此代碼由Xamarin生成,而不是由我生成。我試着包括'使用Xamarin.Forms;',但不幸的是這並不能解決問題(仍然是同樣的問題)。 '使用Forms = Xamarin.Forms.Forms;'也沒有工作。終於解決的是使用一個唯一的標識符,即'使用XForms = Xamarin.Forms.Forms;' – csvan