1

大まかに言えば、私の質問は次のとおりです。

Linux プラットフォームの Mono でサポートされているものはすべて、Android プラットフォームの Android.Xamarin でサポートされていますか?

詳細情報: .NET v3.5 フレームワークを対象とする複雑な C# アプリケーションを Android タブレットに移植する可能性を調査しており、Mono でサポートされているものと Android デバイスでサポートされているものを比較したいと考えています。

Mono の互換性リストは、Mono アーキテクチャでサポートされている機能を説明するのに非常に役立ちます。彼らが明確に述べているように、mono は以下をサポートしています。

WPF、WWF、および限定的な WCF を除く .NET 4.0 のすべて。

ただし、Xamarin for Android で何がサポートされているかを理解するのはそれほど簡単ではありません。System.dll でサポートされている名前空間の説明が含まれているAssemblies に関するこのトピックを見つけました。

Silverlight に加えて、次の名前空間の型: [その他のリスト]...

Silverlightのリファレンスには、System.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 クラス ライブラリ プロジェクトでは発生しないのはなぜですか?

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 に答える