2013-05-06 75 views
1

在很高的層面上,我的問題是:Xamarin的Android for Mono是否支持與Mono相同的.NET庫?

Mono是否支持Android平臺上Android.Xamarin支持的Linux平臺上的所有功能?

更多信息:我正在研究將一個複雜的C#應用​​程序移植到Android平板電腦上的可能性,並且希望確認我對Mono支持的內容和支持的內容的理解在Android設備上。

Mono的Compatibility list在解釋Mono架構中支持哪些功能方面做得相當不錯。正如他們清楚說明的那樣,單聲道支持:

.NET 4.0中除WPF,WWF和有限WCF之外的所有內容。

但是,理解Xamarin for Android所支持的內容並不容易。我發現這個topic on Assemblies,其包括System.dll中

下支持

的Silverlight的命名空間的說明,加上類型的數據從以下命名空間:[更多的上市] ...

silverlight reference提到系統.Windows.Threading是在silverlight下,但如果我只是創建一個新項目,這似乎沒有意義。

下面是一個例子:如果我打開一個新的mono項目並嘗試訪問System.Windows.Threading,除非包含對WindowsBase.dll的引用,否則我無法訪問它。此外,我可以只有成功地從一個「Android類庫」項目中引用WindowsBase.dll - 如果我嘗試創建一個「Android應用程序」項目並嘗試引用WindowsBase.dll我收到一個神祕的編譯錯誤,粘貼在下面。

Error 2 Exception while loading assemblies: System.IO.FileNotFoundException: Could not load assembly 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'. Perhaps it doesn't exist in the Mono for Android profile? 
File name: 'WindowsBase.dll' 
    at Xamarin.Android.Tuner.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference, ReaderParameters parameters) 
    at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List`1 assemblies, AssemblyDefinition assembly) 
    at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List`1 assemblies, AssemblyDefinition assembly) 
    at Xamarin.Android.Tasks.ResolveAssemblies.Execute() C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets 720 2 AndoidCtmConnectionTester 

所以我的跟進問題是:爲什麼從Android應用程序項目引用一個DLL時,我會得到一個編譯錯誤,而不是一個Android類庫項目

+1

要查看是否支持,您可以簡單地檢查http://androidapi.xamarin.com/ – 2013-05-07 02:29:39

回答

3

System.Windows.Threading程序被認爲是WPF的一部分,所以無意讓它在Xamarin.Android中工作。

如果你想組裝直接引用.NET,Xamarin.Android可以加載只有幾個簡單的.NET程序集(以及警告:「引用的項目針對的是不同的框架家族(.NETFramework)」)

WindowsBase.dll封裝了一些win32原生方法也很有可能,所以無法在Android環境下運行它。

所以壞消息是你需要將你的代碼移植到System.Threading類。

+0

感謝您的信息米哈爾。在未來,我希望Xamarin在編譯Android類庫時添加編譯時檢查,以便在編譯庫本身時運行編譯錯誤,而不是在Android應用程序中包含之前編譯的類庫時 – CrimsonX 2013-05-10 18:03:12