web-dev-qa-db-ja.com

ポータブルクラスライブラリは実際に何を解決しますか?

PCLは実際に何を解決するのだろうかと思っていました。クロスプラットフォームのタイプに制限するだけの場合、MicrosoftがIDEを介してこれを標準の.NETライブラリの機能として作成しなかったのはなぜですか?

基本的に、いくつかのPOCOオブジェクトを含む.NETライブラリを簡単にコンパイルし、Silverlight、WPF、およびWindowsストアアプリでDLLを参照します。再コンパイルしたり、問題が発生したりする必要はありません。難しいことはありますか?標準の.NETライブラリでは機能しないPCLで機能するコードの例?


ああ、そして私は明らかに標準の.NETライブラリで機能するものがあることを知っています、私はそれについて心配していません...私は私の質問がこれだと思います:

ポータブルクラスライブラリでコンパイルされ、それが正しく機能しないコードはありますか? まったく同じコード .NETライブラリにありましたか?

22
michael

2つのこと:

まず、複数のプラットフォームで動作するライブラリを作成する場合は、実行時に、すべてのプラットフォームで使用できないAPIを誤って使用したことを知りたくありません(TypeLoadExceptionまたはMissingMethodExceptionなどを介して) 。したがって、ポータブルクラスライブラリは、ターゲットとするすべてのプラットフォームでサポートされているAPIのインテリセンスのみを提供し、そのセット以外のものについてはビルドエラーが発生します。

次に、すべてのプラットフォームで使用可能なAPIのみを使用する.NET Frameworkライブラリを作成する場合、DLL作成されたまましない他のプラットフォーム(つまりWindows)で機能しますPhoneとSilverlight)をそれらのプラットフォーム用のライブラリとしてコンパイルせずに。それはあなたが期待しているように聞こえます、そしてそれは合理的な期待ですが、過去には真実ではありませんでした。実際、Windows Storeアプリ用のクラスライブラリを作成し、.NET FrameworkとWP8で使用可能なAPIのみを使用する場合、結果のバイナリwouldこれらのプラットフォームの両方で変更なしで機能します) 。

22
Daniel Plaisted

コード自体についてはあまり心配しませんが、次のことを試して、ポータブルクラスライブラリが役立つ理由を確認してください。

  1. 標準の.NET4.5クラスライブラリを作成します(空にすることも、クラスを含めることもできません)。
  2. Silverlight5アプリケーションを作成します。
  3. Silverlight5アプリケーションから.NET4.5クラスライブラリを参照してみてください。

次のエラーメッセージが表示されます。

Silverlightランタイムに対して構築されていないため、Demo.Utils.dllへの参照を追加することはできません。 Silverlightプロジェクトは、Silverlightアセンブリでのみ機能します。

それ自体は、 なぜ ポータブルクラスライブラリはとても素晴らしいです。難しいのは、コードをプラットフォームに依存しないように適応させることです。これは簡単に聞こえますが、思ったほど簡単ではありません。私を信じてください。最初にフォルダからファイルを読み取ろうとして、PCLでFileInfoが許可されていないことに気付いたときはイライラしますが、Microsoftのガイダンスでは、プラットフォームの依存関係を抽象化して、実際にそれを処理するインターフェースを実装するクラス。実際、ここに 素敵な記事 があります。


調べるのに役立つもう1つの記事では、PCLの設定方法の内部動作について少し説明します。この記事はあなたが理解するのに役立ちます なぜ PCLは、複数のプラットフォームをターゲットにすることができます。 https://www.simple-talk.com/blogs/2013/04/19/inside-portable-class-libraries/

5
m-y

ポータブルクラスライブラリとは何ですか?で簡単なYouTubeビデオを作成しました。ここから見ることができます http://www.youtube.com/watch?v=DcBfjdDHlxo

しかし、ここでさらに詳しく答えさせてください。クラスライブラリプロジェクトを作成することの全体的なポイントは、再利用性です。ここで、この再利用性は、.NETアプリケーション内だけでなく、.NETアプリケーション間だけでなく、さまざまなタイプの.NETアプリケーション間でも必要です。現在、さまざまな種類の.NETアプリケーションは、WPF、Windows、Silver light、WindowsPhoneなどを意味します。 enter image description here

現在、これらのアプリケーションタイプはそれぞれ異なり、.NETフレームワークも少し異なります。

たとえば、シルバーライトアプリケーションで単純な「クラスプロジェクト」を参照しようとすると、以下のエラーで終了します。そこで、ポータブルクラスライブラリが役立ちます。ポータブルクラスを作成することで、あらゆる種類の.NETプロジェクトタイプでそれを参照できます。

3

ポータブルクラスライブラリは実際に何を解決しますか?

最終的にそれは多くを解決します! (Javaのようですが、今世紀は)

ポータブルクラスライブラリでコンパイルされ、まったく同じコードが.NETライブラリにあると正しく機能しないコードはありますか?

原則として、私はそうではないと思います、その逆ではありませんか?

しかし、私は、すべての正当な敬意を払うだろうと思います、あなたは実際に要点を見逃しているかもしれません

コードのコピー/貼り付け、プロジェクトのクローン作成、リンクコード、条件付きコンパイラ指令(T4テンプレートでも?)について考えてみてください。最終的な結果は、参照DLL Hellと不要な複雑さ、定型文、冗長性です(あまりエレガントではありませんか?)

バイナリの非互換性に対する回避策ではありませんか?

非常に早い段階ですが、XamarinとMonoがpclのサポートに取り組んでいるのを見ると、その方向性は素晴らしいと思います(すでに部分的に機能しています)。HtmlとJavascriptの熱狂またはコードジェネレーターからすべてを保存できるのはそれだけだと思います。 (長生きのTypeSafe!)

PCLは、WindowsボックスからC#軍を解放することもできます

(しかし、これはすべて私の意見です)

2
Dan

Visual Studio 2012で開発している場合、.NET Framework 4に関係するポータブルクラスライブラリにはいくつかのAPIの違いがあります。主に、これはSystem.NetおよびSystem.Xml名前空間のいくつかのプロパティとメソッドに関係します。詳細については、 this MSDNページを参照してください。

1