1

在高层次上,我的问题是:

Android 平台上的 Android.Xamarin 是否支持 Mono 在 Linux 平台上支持的所有内容?

更多信息:我正在研究将针对 .NET v3.5 框架的复杂 C# 应用程序移植到 Android 平板电脑上的可能性,并希望确认我对 Mono 中支持的内容与 Android 设备上支持的内容的理解。

Mono 的兼容性列表很好地解释了 Mono 架构中支持的功能。正如他们明确指出的那样,单声道支持:

.NET 4.0 中的所有内容,除了 WPF、WWF 和有限的 WCF。

但是,了解 Xamarin for Android 中支持的内容并不容易。我在 Assemblies 上找到了这个主题,其中包括对 System.dll 下支持的命名空间的描述

Silverlight,以及来自以下命名空间的类型:[更多列出]...

silverlight 参考提到 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 类库项目

4

1 回答 1

3

System.Windows.Threading 被视为 WPF 的一部分,因此无意使其在 Xamarin.Android 中工作。

如果要直接引用 .NET 程序集,Xamarin.Android 只能加载几个简单的 .NET 程序集(并带有警告:“引用的项目针对不同的框架系列 (.NETFramework)”)

还有很大可能是WindowsBase.dll包装了一些win32的原生方法,所以在Android环境下是不可能运行的。

所以坏消息是您需要将代码移植到 System.Threading 类。

于 2013-05-10T11:21:30.053 回答