在高层次上,我的问题是:
是在Android支持的Linux平台上Mono支持的所有内容。Android平台上的Xamarin ?
更多信息:我正在研究将一个复杂的c#应用程序移植到Android平板电脑上的可能性,并且想确认我对Mono和Android设备支持的理解。
Mono的兼容性列表很好地解释了Mono架构中支持的特性。正如它们明确指出的那样,mono支持:
. net 4.0中的所有内容,除了WPF, WWF和有限的WCF。
然而,了解Xamarin在Android中支持什么并不容易。我在程序集上找到了这个主题,其中包括对System.dll
下支持的名称空间的描述。Silverlight,加上以下命名空间的类型:[更多列出]…
silverlight参考提到System.Windows.Threading在silverlight下,但如果我只是创建一个新项目,这似乎没有意义。
这里有一个例子:如果我打开一个新的mono项目并试图访问System.Windows。线程,我不能访问它,除非我包括对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)MSBuildXamarinAndroidXamarin.Android.Common.targets 720 2 AndoidCtmConnectionTester
所以我的后续问题是:为什么当从Android应用程序项目引用DLL时,我会得到编译错误,而不是Android类库项目
System.Windows。线程被认为是WPF的一部分,所以不打算让它在Xamarin.Android.
如果你想直接引用。net程序集,Xamarin。Android只能加载几个简单的。net程序集(并警告:"所引用的项目是针对不同的框架族(.NET framework)")。
还有一个很大的机会,WindowsBase.dll包装一些win32本地方法,所以不可能在Android环境下运行。
所以坏消息是你需要把你的代码移植到System上。线程类。