2017-06-16 3 views
0

私は、.NET Standardと複数のフレームワークとの統合について一日中研究してきました。私はそれをすべて得たと思うが、ただ一つの質問だけが私の心の中をさまよっており、パッケージの包含に関連している。ネットスタンダードパッケージ

例えば、私はネット標準1.6をターゲットにしていると私は、Visual Studio 2017でアセンブリリストを見たとき、私は見ることができます:「するSystem.Reflection(4.3.0)」を。つまり、そのバージョンのアセンブリはサポートされていますが、純標準バージョンのAPI仕様では、"System.Reflection.Emit.ILGeneration"をサポートしていません。

だから私はパッケージを追加するとどうなりますILGeneration 4.3.0;パッケージによると、私はのためのサポートが必要です。私は、アセンブリリストに従っている

System.Reflection (>= 4.3.0) 
System.Reflection.Primitives (>= 4.3.0) 
System.Runtime (>= 4.3.0) 

を、ので、私の質問は以下のとおりです。

  • ILGenerationがAPIに実装されていない理由は、その原因とXamarinのスペック.iOSはDLRをサポートしていません(AOTコンパイラ)?
  • パッケージを追加すると、参照の際にネット標準1.6を使用している別のライブラリまたはフレームワークが混乱する可能性がありますか? (Xamarin.iOSを無視する)
  • 条件付きコンパイルを使用してXAMarin.iOSを使用している場合、または他の実装との潜在的な競合のいずれかを使用している場合、ILGenerationパッケージを削除するだけでは何が止まりますか? (最後の質問が真であると仮定して)。

ありがとうございます。

答えて

1

ここでの大きな違いは、中/ .NET Standardとそれの上に構築されたあるいくつかのパッケージの一部いくつかのAPIがあるということです。

.NET標準< 2.0では、 "標準"はNETStandard.Libraryパッケージが含まれるパッケージのクロージャによって定義されます。System.Reflection.Emit.ILGenerationは標準外であると見なされますが、.NET標準をサポートするほとんどのプラットフォーム特にILGenerationの場合、基本的なランタイムに密接に関連しているため、これは正確ではない可能性があります。ただし、標準の上に構築されたパッケージはAPIを提供できますが、特定のプラットフォームが機能をサポートしていない場合は例外をスローすることを選択します。

代わりのNETStandard.Libraryを参照し、いくつかの鶏と卵の問題を回避するためにCoreFX参照から個々のパッケージをビルドされたパッケージ(NETStandard.LibraryMicrosoft.NETCore.Appはほとんどが彼らのパッケージの単なる集合です)。他のサードパーティのライブラリも同様ですが、NETStandard.Libraryのアップデートで修正されているので、新しいプロジェクトではこの設定はお勧めしません。

Microsoft.NETCore.Appというパッケージの奇妙な副作用は、.NET Standard 1.6向けに構築されたいくつかのパッケージが、単に「契約」を定義するのではなく実装を導入しているということです。 .NETのコア2.0と.NETの標準2.0の場合

二つのパッケージNETStandard.LibraryMicrosoft.NETCore.Appは、もはや「メタパッケージ」であるため、この設定はビットを変更しませんが、DLLのの束を含むフラットパッケージ(やのためにもネイティブ資産自己完結型アプリケーション)。また、netstandard2.0用に構築されたライブラリには、公開時にデフォルトでパッケージ参照が含まれません。つまり、.NET StandardのAPIはプラットフォームによって取り込まれたものとみなされます。これを考慮して

、ご質問を見てみましょう:

  1. IL生成は、標準の一部ではない理由は、最も可能性の高いAOTコンパイルの制限です。これにはXamarin iOSが含まれますが、.NET NativeおよびCoreRTにも適用されます。すべてのプラットフォームでAPIを実装する必要はないため、これは「標準への拡張」と見なされるため、.NET標準1.6をサポートしていてもすべてのプラットフォームで機能するわけではありません。

  2. 問題のAPIをサポートしていないプラットフォームで実行します。このパッケージを使用して導入される制限は、それを参照するすべてのプロジェクトに一時的に適用されます。

  3. .NET SDKはデフォルトでXamarinターゲットフレームワークをサポートしていませんが、MSBuild.Sdk.Extras NuGetパッケージを使用すると、.NET StandardとXamarin iOSをマルチターゲットにするライブラリを作成できます。

+0

非常に有益な回答、ありがとうございます:) –