在高层次上,我的问题是:
Android平台上Android.Xamarin支持的Linux平台上Mono支持的所有内容是什么?
更多信息:我正在研究将面向.NET v3.5框架的复杂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提到System.Windows.Threading是在silverlight下,但如果我只创建一个新项目,这似乎没有意义。
这是一个例子:如果我打开一个新的单一项目并尝试访问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类库项目
答案 0 :(得分:3)
System.Windows.Threading被视为WPF的一部分,所以无意让它在Xamarin.Android中运行。
如果你想直接引用.NET程序集,Xamarin.Android只能加载几个简单的.NET程序集(并带有警告:“引用的项目针对不同的框架系列(.NETFramework)”)
WindowsBase.dll很有可能包含一些win32原生方法,因此无法在Android环境下运行它。
所以坏消息是您需要将代码移植到System.Threading类。