2017-02-02 43 views
2

私はAndroidとiOS用のXamarin.Formsアプリケーションを開発しています。 pclプロジェクトはかなり成長し、FluentValidation、SQlite、Newtonsoft.Jsonのような多くのナゲットパッケージがインストールされています。プラットフォーム固有のプロジェクトには、カスタムレンダラやもののようなコードが数行しかありません。彼らが持っている唯一の参考資料は、SQliteです。Xamarin.Formsアセンブリ参照

これはAndroid用にコンパイルするときにうまく動作します。しかし、iOS用にビルドしようとすると、エラーが表示されます。>参照を解決できません(System.EnterpriseServices.Wrapper.dll)。

私の質問はこのdllに固有ではなく、さらにそれが本当にどのように動作しているか知りたいです。私はpclプロジェクトに必要なパッケージをインストールすることができます。制限はありますか?パッケージはXamarin.iOS/Xamarin.Androidと互換性がなければなりませんか?どのようにdllが実際にどこから来ているのか、私は追跡できますか?

Androidでは動作するが、iOSでは動作しないのはなぜですか?

+0

私が知る限り、 'System.EnterpriseServices.Wrapper.dll'はネイティブのC++ライブラリであり、Win32のみであるため、AndroidやiOSのいずれのアプリケーションでも参照する必要はなく、PCLで参照しないでくださいとしょうかん。 – SushiHangover

+0

@SushiHangoverそれは問題です。私の解決策のどこにでも参照を使用することに気づいていません。どのようにして参照を使用するのか分かりません。私はこれを見つけるのですか? – greenhoorn

+0

OS-X/Linuxでは "find。-name" * .dll "-print0 | xargs -0 -n 1 -I%ikdasm -assemblyref"% "| grep" Name = ""あなたのパッケージディレクトリから、すべてのref'dアセンブリを一覧表示します。Windowsでは、 'Ildasm.exe'を使用できます(使用方法については、https://msdn.microsoft.com/en-us/library/f7dy01k1(v)を参照してください)。 = vs.110).aspx)AsmSpyは、 '--all'オプションを使用すると、Windowsでもうまくいきます:https://github.com/mikehadlow/AsmSpy – SushiHangover

答えて

1

はい、プラットフォーム間には制限があります。 PCLプロジェクトで使用するさまざまなアセンブリおよび/またはナゲットパッケージは、ターゲットとするプラットフォームに合ったものでなければなりません。

あなたのiOSプロジェクトをビルドするときに、PCLプロジェクトもiOSターゲット用に構築されているため、アセンブリに互換性が必要です。アセンブリは単なるサブセットです。

Xamarin.iOS、Xamarin.Android、およびXamarin.Mac ダース以上のアセンブリと、すべての船。 Silverlightは デスクトップ.N​​ETアセンブリの拡張サブセットであるのと同様に、Silverlightおよびデスクトップ.N​​ETアセンブリの拡張サブセット です。

アンドロイド専用のアセンブリを使用する場合は、PCLプロジェクトではなくandroid-projectでアセンブリを追加します。

supported assemblies over the platformsのリストは、Xamarinの開発者ページにあります。

このリストでは、System.EnterpriseServices.dllはアンドロイドのみで、iOSでは利用できないことがわかります。さらに、this pageのiOSプラットフォームでSQLite/System.Dataを使用するといくつかの制限があります。

+0

すばらしい、ありがとう:-) – greenhoorn

関連する問題