2013-05-02 21 views
21

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

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


ああ、私は明らかに標準の.NETライブラリに働くだろういくつかのものがあることを知っているが、私はそれについて心配しないんだけど...私は私の質問はこれですね:

ですポータブルクラスライブラリでコンパイルするコードは、と全く同じコードが.NETライブラリに含まれていれば、それは機能しません。

+1

複数のバージョンのプロジェクトを作成しなくても、複数のバージョンの.NET Frameworkをサポートできます。それ以外の場合は、WPFとWindowsストアをターゲットにするための別個のprjectが必要です。 –

+0

@Ramhound:私はそれの目標を理解していますが、PCL(コンパイル済み)と標準の.NETライブラリ(コンパイル済み)で正しく機能するコードの実際の例を期待していました。クロスプラットフォームであるクラスとメソッドのみを使用するように強制すると、標準の.NETライブラリを使用できませんでしたか?質問を読むと、PCLで動作する**同じ正確なコード**が.NETライブラリで正しく機能しないかどうか尋ねています。 – michael

+0

.NET Frameworkの複数のバージョンに存在するクラスのみを使用するという考え方は、移植可能なクラスライブラリの機能とまったく同じです。 .NETコードは.NETコードです。 –

答えて

21

2つのこと:

まず、あなたの意図は、複数のプラットフォーム上で作業を行うライブラリを作成することであるならば、あなたはあなたが誤って利用できなかったAPIを使用し、実行時に見つけるためにしたくありませんすべてのプラットフォームで(TypeLoadExceptionまたはMissingMethodExceptionなどを介して)ポータブルクラスライブラリは、ターゲットとするすべてのプラットフォームでサポートされているAPIに対してのみインテリセンスを提供し、そのセット以外のものについてはビルドエラーが発生します。あなただけのすべてのプラットフォームで利用可能なAPIを使用して、.NET Frameworkライブラリを作成する場合

第二に、DLLはまだを作成しますないライブラリとしてコンパイルすることなく、他のプラットフォーム(つまり、Windowsの携帯電話とSilverlight)に関する作業それらのプラットフォームのために。それはあなたが期待するように聞こえますが、それは合理的な期待ですが、過去には真実ではありませんでした。ポータブルクラスライブラリはこれを実現する方法です(実際には、Windows Storeアプリケーション用のクラスライブラリを作成し、.NET FrameworkとWP8用のAPIのみを使用する場合、結果のバイナリとなります)これらのプラットフォームの両方で変更されません)。

+2

私の推測では、営業担当者は、インテリセンスを制限するだけでなく、PCLにもっと多くのものがあるかどうかを調べようとしていたということです。:) –

+2

これらはPCLのいくつかの目標かもしれませんが、 。 .Net FrameworkとSilverlight/WP7の両方に 'Socket'、' IPEndPoint'などのクラスがあります。しかし、PCLにはそれらがありません。両方の.Net Framework + XNA、Silverlight5、WP7には 'Vector3'、' Matrix'クラスがありますが、PCLには何もありません。互換性のないフレームワークのほんの一握りに加えて、我々は現在、30以上の互換性のないプロファイルを持っています。そして私はまだ私のPCの機能を移植するためにPCLを使用しなければならない2つの整数を追加しています。 –

+0

@ Ark-kun http://blogs.msdn.com/b/dsplaistedを参照してください/archive/2012/08/27/how-to-make-portable-class-library-work-for-you.aspx APIが移植性がない理由については、いくつかの一般的な理由があります。一般に、SilverlightとWP7は実際にはPCLを考慮して設計されていませんでした。 .NET 4.5、.NET for Windows Storeアプリケーション、およびWindows Phone 8では、複数のプラットフォームで使用可能なほぼすべてのAPIが、これらのプラットフォーム間で移植可能であることがわかります。 –

1

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

2

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

最終的にはLOTを解決します! (Javaのようしかし、今世紀中)

は、ポータブルクラスライブラリでコンパイルする任意のコードは、まったく同じコードが.NET 図書館にあった場合 が正しく機能しないこと、ありますか?

原理ではないと思いますが、それ以外の方法はありませんか?

しかし、私が思うには、あなたが実際にすべての敬意のコピー/貼り付けコード、およびプロジェクトクローニング、リンクコード、条件付きコンパイラディレクティブ、(でもT4テンプレート?)について考えてみてポイント

が欠落して可能性がありますされます最終的な結果は参照DLL Hellであり、不要な複雑さ、定型文、冗長性(正確ではない?)

バイナリ互換性の回避策はありませんか?

非常に早いですが、XamarinとMonoがpclをサポートするようになっているのを見ると、そのすばらしい方向性があると思います(彼らはすでに部分的に働いています).HtmlとJavascriptの狂気から救うことができる唯一のものだと思いますまたはコードジェネレーター。 (ロングタイプセーフを生きる!)

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

私はコード自体についてはあまり気にしません

5

(しかし、すべてこれでちょうど私の意見)しかし、以下を試してみて、ポータブルクラスライブラリがなぜ有用であるかを見てみましょう。

  1. 標準の.NET 4を作成します。5クラスライブラリ(空でもクラスも含まない)。
  2. Silverlight 5アプリケーションを作成します。
  3. Silverlight 5アプリケーションから.NET 4.5クラスライブラリを参照しようとしています。それはSilverlightのランタイムに対して を構築していなかったとして、あなたはDemo.Utils.dllへの参照を追加することはできません

は、次のエラーメッセージが表示されます。 SilverlightプロジェクトはSilverlightアセンブリで のみ動作します。

それだけでは、という理由だけです。ポータブルクラスライブラリは素晴らしいです。厳しい部分は、プラットフォームにとらわれないようにコードを適合させようとしています。これは簡単に思えますが、あなたの思うほど簡単ではありません。あなたが最初にフォルダからファイルを読み込み、PCLがFileInfoを許していないことに気が付いたら、私を信頼してください。しかし、マイクロソフトの指針は、プラットフォームの依存関係を抽象化し、インターフェイスを実装するクラスを挿入することです実際にそれが処理されます。実際、ここにはnice articleがあります。


もう1つの有用な記事は、PCLが設定されている方法の内部的なやり方を説明しています。この資料では、 PCLが複数のプラットフォームをターゲットにできる理由を理解するのに役立ちます。https://www.simple-talk.com/blogs/2013/04/19/inside-portable-class-libraries/

+1

"ポータブルクラス図書館がなぜすごく優れているのか、それ自体が味です。"私は、PCLが決してそこにあってはならない問題を解決しようとしているが、そうしていないと言いたい。 –

+0

「PCLは決してそこにあってはならない問題を解決しようとしていると言いたい」 - 問題はどうしてそこにはないのだろうか?明らかに、異なるプラットフォーム上で全く同じAPIを使用することは実用的ではありません。 .NET APIの全体をプラットフォームに依存しないものにすることは大変な作業であり、.NETには単一のプラットフォームしかサポートされない方がよいでしょう。これは、アプリケーションがすべての面を制御し、開発者に言語とAPIのフルパワーを使用させることができるため、独自のハードウェアのみをサポートするのと同じ理由です。 – Anshul

3

私は、ポータブルクラスライブラリとは何のシンプルユーチューブの動画を作成している、あなたはhttp://www.youtube.com/watch?v=DcBfjdDHlxo

ここからそれを見ることができますが、再利用性がある私は、クラスライブラリプロジェクトを作成するための詳細here.The全体のポイントでお答えしましょう。今度は.NETアプリケーションの中だけでなく、のさまざまなタイプの.NETアプリケーションのに、この再利用性が必要です。 .NETアプリケーションの種類が異なると、WPF、Windows、Silverlight、Windows Phoneなどがあります。 enter image description here

これらのアプリケーションタイプは、それぞれ異なる.NETフレームワークを持っています。

たとえば、軽いアプリケーションの場合、単純な「クラスプロジェクト」を参照しようとすると、以下のエラーで終了します。ポータブルクラスライブラリが便利です。移植可能なクラスを作成することで、あらゆる種類の.NETプロジェクトタイプで参照できます。

関連する問題