これがばかげた質問のように聞こえる場合はお詫び申し上げます。私は物事が内部でどのようにリンク/バンドル/組み立てられるかについてはあまり経験がありません。
始める前に、ドキュメント(https://docs.microsoft.com/en-us/xamarin/cross-platform/app-fundamentals/code-sharingなど)を読んで見つけてみたと言いたいです。答えは、しかしできませんでした。
Xamarin.Formsソリューションがあり、.NetStandardプロジェクトを参照している場合:
質問1:このプロジェクトのすべてのコードは、後で分解できるようにコンパイルされてアプリに含まれますか、それとも実際に使用するクラスのコードのみが含まれますか?
もう少し詳しく説明します。
たとえばSchool
、IStudent
(DIを介して注入する)を期待するStudent
クラスと、を実装するクラスがあるとしますIStudent
。これらは両方とも、Xamarin.Formsプロジェクトで参照している.NetStandardプロジェクトに存在します。ただし、実際にStudent
クラスを使用するだけの場合(IStudent
IoCコンテナーにtypeを登録することにより)、School
ビルドされたアプリにもコードが含まれますか?
質問2:プロジェクトのすべてのコードが含まれている場合、構成設定、属性、サードパーティライブラリ、またはその他の方法で、含める/除外するクラスを強制的に指定する方法はありますか?
私の知る限り、NETStandardプロジェクトのすべてがコンパイルされ、アプリに同梱されます。
コンパイルされたアセンブリから未使用のコードを削除する場合は、リンカーを使用する必要があります。すべてをリンクするには、「Sdkとユーザーアセンブリ」を選択する必要があります。
リンカは、使用しているメソッドとフィールドを削除しようとはしませんが、攻撃的すぎることがよくあります(たとえば、リフレクションによってのみ参照されるメソッドは削除されます)。
幸いなことに、リンカーの動作を微調整して機能させる方法はいくつかあります。詳細へのリンク:
iOSおよびAndroidのリンカー
https://docs.microsoft.com/en-us/xamarin/ios/deploy-test/linker
https://docs.microsoft.com/en-us/xamarin/android/deploy-test/linker
リンカ設定に関する公式ドキュメント:
https://docs.microsoft.com/en-us/xamarin/cross-platform/deploy-test/linker
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加