2017-08-28 22 views
2

PCLを.NET標準1.3に変換しようとしていますが、失敗しています。私は失敗をなぜ単純な例にまで絞り込んだのですか。なぜそれが失敗するのか理解できません。.NET StandardではIServiceProviderが使用できません。

私はIMarkupExtensionを実装し、単純にそのクラスがで失敗してプロジェクトをコンパイルしたクラスを持っている:

型「IServiceProvider」が参照されていないアセンブリで定義されています。アセンブリ 'System.ComponentModel、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'への参照を追加する必要があります。

なぜ.NET標準を使用しているXamarin FormsライブラリのSystem.ComponentModelを取得しようとしていますか?それは私には意味がありません。

プロジェクト参照は、あなたが得ることができるほど単純です:

enter image description here

クラスの実装は任意の簡単にできませんでした:

namespace OpenNETCF 
{ 
    public sealed class ScaledDouble : IMarkupExtension 
    { 
     public object ProvideValue(IServiceProvider serviceProvider) 
     { 
      return null; 
     } 
    } 
} 

私は、コンパイラのエラーを取り除くことができますプロジェクトファイルを手作業で編集してSystem.ComponentModelをインクルードしますが、消費するアプリケーションは実行時に型をロードできません。

<ItemGroup> 
    <PackageReference Include="Xamarin.Forms" Version="2.3.4.267" /> 

    <!-- Required for IMarkupExtension and IServiceProvider to compile. No idea why. --> 
    <PackageReference Include="System.ComponentModel" Version="4.3.0" /> 
</ItemGroup> 

ここでは何が起こっていますか?

+0

うーん、これらは、Silverlightのインターフェイスです。 [互換性チャート](https://docs.microsoft.com/en-us/dotnet/standard/net-standard#net-implementation-support)を確認してください。 Silverlightはデッドテクノロジーで、2013年に開発が中止されました。 –

+0

[このパッケージ](https://www.nuget.org/packages/System.ComponentModel/)をインストールしましたか? –

答えて

0

.NET標準プロジェクトには既定のアセンブリがありません。参照を追加するか、ナゲットからダウンロードする必要があります。

PM>インストール・パッケージSystem.ComponentModel