Visual Studio 2015の共有プロジェクトとクラスライブラリの違いは何ですか?


240

Visual Studio 2015の新機能を見ていましたが、Shared Projectがたくさん登場しましたが、クラスライブラリやポータブルクラスライブラリを使用する場合とどのように違うのか理解できません。誰か説明できますか?

編集:共有プロジェクトはVisual Studio 2015の新機能であり、ポータブルクラスライブラリとは異なります。ポータブルクラスライブラリとは何かを理解しています。私が理解しようとしているのは、共有プロジェクトとクラスライブラリの違いです。以下のリンクを参照してください。

http://www.c-sharpcorner.com/UploadFile/7ca517/shared-project-an-impressive-features-of-visual-studio-201/


回答:


238

共有プロジェクトとクラスライブラリの違いは、後者がコンパイルされ、再利用の単位がアセンブリであることです。

前者と同様に、再利用の単位はソースコードであり、共有コードは、共有プロジェクトを参照する各アセンブリに組み込まれます。

これは、特定のプラットフォームを対象とするが、共有する必要があるコードがまだある個別のアセンブリを作成する場合に役立ちます。

こちらもご覧ください

共有プロジェクト参照はソリューションエクスプローラーの[参照]ノードの下に表示されますが、共有プロジェクトのコードとアセットは、メインプロジェクトにリンクされたファイルであるかのように扱われます。


以前のバージョンのVisual Studio 1では、[追加]-> [既存のアイテム]を選択し、[リンク]を選択することで、プロジェクト間でソースコードを共有できました。しかし、これはちょっと不格好で、個別のソースファイルを個別に選択する必要がありました。複数の異なるプラットフォーム(iOS、Androidなど)のサポートへの移行に伴い、共有プロジェクトの概念を追加することにより、プロジェクト間でソースを共有しやすくすることを決定しました。


1この質問と私の回答(これまで)は、共有プロジェクトがVisual Studio 2015の新機能であったことを示唆しています。実際、それらはVisual Studio 2013 Update 2でデビューしました。


1
同じ共有プロジェクトを参照する2つのプロジェクトがあるとします。それらの1つが他への参照を追加する場合、重複する型宣言エラーが発生しますか?
Asad Saeeduddin 2015

3
@アサド-私はチェックしていませんが、チェックしないと思います。名前が同じで、同じ名前空間内で宣言されているが、異なるアセンブリ内に存在する2つの異なる型を持つことができます。それ自体はエラーではありません。
Damien_The_Unbeliever 2015

2017年のOPとまったく同じ質問がありましたが、現在.net標準2.0を使用しているためです。共有プロジェクトは現在廃止されていませんか?今日、新しいwebappまたはuwp appを作成する場合、
JP Hellemons 2017年

1
@JPHellemons-.net標準は適切ですが、何らかの理由で(たとえば、特定のプラットフォームでのみ使用可能な機能がある場合など)それ以外の場所に移動する必要がある場合は、共有プロジェクトが適切なアプローチである可能性があります。
Damien_The_Unbeliever 2017年

1
共有プロジェクトでは、JavaScriptファイルを共有できると言います。bundleConfigでそれをどのように使用しますか?
Leth

34

このブログからいくつかの情報を見つけました。

  • クラスライブラリでは、コードをコンパイルすると、ライブラリごとにアセンブリ(dll)が生成されます。ただし、共有プロジェクトの場合、ヘッダー情報は含まれないため、共有プロジェクト参照がある場合は、親アプリケーションの一部としてコンパイルされます。個別のDLLは作成されません。
  • クラスライブラリでは、C#コードの記述のみが許可されていますが、共有プロジェクトには、C#コードファイル、XAMLファイル、JavaScriptファイルなどを含めることができます。

7
クラスライブラリにも.xamlを含めることができます(ユーザーコントロール)
デフォルトの

21

短期間での違いは

1)PCLは、SharedProjectとは異なり、.NET Frameworkへのフルアクセスを持ちません。

2)プラットフォーム固有のコードの#ifdef-PCLで書き込むことはできません(#ifdefオプションは、独自のDLLとして個別にコンパイルされるため、コンパイル時に(#ifdefが評価されるとき)、PCLでは使用できません)どのプラットフォームになるかはわかりません。)共有プロジェクトとしてどこにできるか。

3)プラットフォーム固有のコードは、PCLのInversion Of Controlを使用して実現されます。#ifdefステートメントを使用する場合と同じように、共有プロジェクトでも同じことができます。

PCLと共有プロジェクトの違いを説明する優れた記事は、次のリンクにあります。

http://hotkrossbits.com/2015/05/03/xamarin-forms-pcl-vs-shared-project/


18

他の人がすでに書いたように、要するに:


コード(ファイル)レベルでの共有プロジェクトの再利用。フォルダー構造とリソースも考慮に入れます。


アセンブリレベルでのpclの再利用

ここで私が答えからほとんど欠けていたのは、PCLで利用可能な機能の制限に関する情報です。例として、ファイル操作が制限されている(XamarinクロスプラットフォームプロジェクトでFile.IO機能の多くが欠けていた)場合があります。


共有プロジェクトの詳細:
+複数のプラットフォーム(Xamarin iOS、Android、WinPhoneなど)をターゲットにする場合は#ifを使用できます
+各ターゲットプロジェクトで使用可能なすべてのフレームワーク機能(条件付き
でコンパイルする必要があります)oコンパイル時に統合
-やや大きいサイズ結果のアセンブリの
一覧-Visual Studio 2013 Update 2以降が必要

pcl
+共有アセンブリを生成します+
古いバージョンのVisual Studio(2013 Update 2より前)で使用可能
o動的にリンク
-制限された機能(参照されているすべてのプロジェクトのサブセット)

選択肢がある場合は、共有プロジェクトに参加することをお勧めします。これは一般に、より柔軟で強力です。事前に要件を知っていて、PCLがそれらを満たせる場合は、そのルートを使用することもできます。PCLはまた、プラットフォーム固有のコードを作成できないようにすることで、より明確な分離を強制します(そもそも共有アセンブリに配置するのは適切でない場合があります)。

両方の主な焦点は、複数のプラットフォームをターゲットとする場合です。それ以外の場合は、通常、通常のライブラリ/ dllプロジェクトのみを使用します。


9

VS 2015から簡潔に

共有プロジェクトでは、コード、アセット、リソースを複数のプロジェクトタイプで共有できます。具体的には、次のプロジェクトタイプで共有プロジェクトを参照して使用できます。

  • コンソール、Windowsフォーム、およびWindows Presentation Foundation。
  • Windowsストア8.1アプリとWindows Phone 8.1アプリ。
  • Windows Phone 8.0 / 8.1 Silverlightアプリ。
  • ポータブルクラスライブラリ。

注:-共有プロジェクトとポータブルクラスライブラリ(PCL)のどちらでも、コード、XAMLリソース、およびアセットを共有できますが、当然、次のように要約できるいくつかの違いがあります。

  • 共有プロジェクトは再利用可能なアセンブリを生成しないため、ソリューション内からのみ使用できます。
  • 共有プロジェクトは、コードが実行されているプラ​​ットフォームを検出するために使用できるWINDOWS_PHONE_APPやWINDOWS_APPなどの環境変数をサポートするため、プラットフォーム固有のコードをサポートしています。
  • 最後に、共有プロジェクトはサードパーティのライブラリに依存することはできません。
  • 比較すると、PCLは再利用可能な.dllライブラリを生成し、サードパーティのライブラリに依存する可能性がありますが、プラットフォーム環境変数はサポートしていません

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.