2016-06-18 12 views
19

私がしたい:.NET Coreクラスライブラリを作成して.NET 4.6プロジェクトから参照するにはどうすればよいですか?

  • は、いくつかのインターフェイスとシンプルな汎用的なヘルパークラスを定義するクラスライブラリを作成します。ジェネリックコレクションとIQueryable<T>に依存しますが、サードパーティの依存関係はありません(よく、JetBrains.Annotations)。
  • どこからでもそのクラスライブラリを参照できます(具体的にはUWP、net46、ASP.Net Core RC2)
  • 理想的には、必要に応じて犠牲にすることができますが、理想的にはproject.jsonシステムを使用します。
  • NuGetフィードに完成し、ライブラリを公開し、そこからVisual Studioの2015.2での私のクラスライブラリプロジェクトを作成するとき、それは

他のアプリで使用し、私は

を述べClass Library (.NET Core)テンプレートを見つけました任意のプラットフォームをターゲットにできるNuGetパッケージとしてのクラスライブラリを作成するプロジェクトテンプレート

すべてのプラットフォーム!ブリリアント...しかし、私はそれを働かせることはできません。いじるの多くの後、私は現在、(私はおそらく完全に今ではそれを壊れました)project.json次き:

{ 
"title": "My Really Useful Class Library", 
"copyright": "Copyright © 2015-16 Tigra Astronomy, all rights reserved", 
"description": "Really neat stuff", 
"language": "en-GB", 
"version": "1.0.0-*", 
"dependencies": { 
    "JetBrains.Annotations": "10.1.4", 
    }, 
"frameworks": { 
    "netstandard1.5": { 
     "imports": "dnxcore50", 
     "dependencies": { 
      "NETStandard.Library": "1.5.0-rc2-24027", 
      "System.Linq.Expressions": "4.0.11-rc2-24027" 
      } 
     } 
    "net46": { 
     "frameworkAssemblies": { 
      "System.Collections": "4.0.*" 
      }, 
     "dependencies": {} 
     } 
    }, 
    "buildOptions": { 
     "xmlDoc": true 
     } 
} 

私は次のことは、同じ溶液中で私の.NET Framework 4.6プロジェクトを作成し、でしたクラスライブラリを参照しようとします。それは私が参照を追加することができますが、私はビルドエラー、未解決のシンボルを取得しています、R#は不幸です。

私はそれを正しくやっていないと思います。ダーク)。

私はTFM、フレームワーク、ライブラリに関するドキュメントをいくつか読んだことがありますが、本当に意味をなさないものはありません。

本当に私のクラスライブラリのproject.jsonに入れる必要があるので、.NET Framework 4.6アプリケーションから、またUWPとASP.NET Core RC2アプリケーションから参照することができますか?これは本当に正しいアプローチですか、あるいは間違った足で始めたのですか?

+0

「正しい」回答をまだ選択していないことをお許しください。私はまだ最新のRTMリリースと最新のプレビューツールにアップグレードしたいくつかのシナリオを通して作業しています。 –

+1

csプロジェクトの ' StingyJack

答えて

3

新しいプロジェクトテンプレート/ .xprojの動作が少し異なります。新しいクラスライブラリ(およびアプリケーションテンプレート)は、プレーンなアセンブリではなく、ナゲットパッケージを生成します。

そのナゲットパッケージ内には、すべてのターゲットがパックされています。つまり、あなたは他のナゲットパッケージと同じように新しいプロジェクトを追加します:あなたはナゲットをナゲットフィードに入れ、これをVisual Studioで参照してそこから取り出します。

Visual Studio Team Services + NuGetパッケージ(myget、self-hosted)を実行していない場合は、パッケージをローカルまたはネットワーク共有フォルダに入れて、このフォルダをナゲット源。

"あまりにも多くの作業がある場合は、1つのフォルダに2つのプロジェクトを作成することもできます:A * .csprojと* .xproj。 * .csprojは.NET 4.6フレームワークをターゲットにしており、* .xprojは上記のとおり、複数のターゲットを持ちます。この設定では、通常は参照を追加するだけで、以前の方法(同じソ​​リューションの場合)と同じようにプロジェクトを参照できます。

+3

新しいテンプレートは、デフォルトでは、nugetパッケージを生成しません。これはDNX/RC1の一部でしたが、RC2プロジェクトテンプレートはVSでこれを自動的に実行しません。パッケージを作成するには、 'dotnet pack'を実行する必要があります。 –

35

今すぐC#プロジェクトを作成するには、xprojcsprojという2つの方法があります。両方ともproject.jsonを使用しているとしますが、それでもプロジェクトタイプには異なる働きがあります。xprojの場合、project.jsonにはプロジェクトの構築に必要なものがすべて含まれています。 csprojの場合、Nugetの依存関係のみが含まれます。

つまり、UWPのようないくつかのプロジェクトタイプは、xproj/project.jsonよりも複雑なビルドパイプラインを必要とするため、xprojで構築できません。 (これは、msbuildに戻った理由の1つでした)

.NET標準ベースのクラスライブラリを作成するには、xprojproject.jsonの2通りの方法があります。通常のcsproj「ポータブルクラスライブラリ」プロジェクトを作成できます。 VS 2015 Update 3 RCでは、PCLプロファイルを.NET標準バージョン(PCLプロファイルの代わりにnetstandard1.x、259など)に変更することができます。

netstandard1.xをターゲットにしてcsprojベースのクラスライブラリを使用する場合は、プロジェクト参照を追加するときに役立ちます。現在、UWPはplatform mapに基づいてnetstandard1.4をサポートしています。問題は、xproj/project.jsonベースのプロジェクトを代わりに使用する場合です。今日xprojを使用する主な理由の1つは、複数のターゲットフレームワーク間のクロスコンパイルを可能にすることです。つまり、プロジェクトから複数の出力を作成します。それは、互換性のあるプロジェクトから参照できる単一の出力を作成することとは異なります。両方とも用途があり、ニーズに応じて異なります。

xprojベースのクラスライブラリを作成する場合は、「参照の追加」ダイアログが機能しない場合、UWPプロジェクトまたは他の互換プロジェクトタイプから参照するための回避策があります'csproj - >xprojはかなり壊れています)。代わりに、ダイアログを使用しての、このようなxprojの出力を指すようにUWP csprojを編集:

<Reference Include="System.Reactive.Interfaces"> 
    <HintPath>..\System.Reactive.Interfaces\bin\$(Configuration)\netstandard1.0\System.Reactive.Interfaces.dll</HintPath> 
</Reference> 

あなたがこれを行う場合は上記のスニペットはRx.NET UWPテストランナーhere

から取られますMSBuild/Visual Studioはそれについて知りませんし、間違った順序でビルドするので、UWPプロジェクトのビルド依存関係をxprojに追加する必要もあります。これを行うには、ソリューションエクスプローラでUWPプロジェクトを右クリックし、[Build Dependencies - > Project Dependencies]を選択します。そのダイアログで、xprojのチェックボックスをオンにしてVS/MSbuildがそのビルドを最初に構築することを確認します。

xproj->xprojの参考文献と上記のUWP - >xprojの参考文献を含む完全なRx.NETソリューションをご覧ください。

+0

オレンに感謝します。私はMSが「新しい工具を待つ」と言っている理由を理解し始めることもできます。おそらく私はVS2015.3 RCを試してみるべきです...おそらく、私のライブラリがUoP/ARMベースのターゲットでIoTコアで動作するようにしたいと思うので、xprojを使用したいと思っています。 –

+2

あなたの目標がUWPとASPNet Core 1.0と互換性があり、単一の出力のみが必要な場合、最も簡単なアプローチは 'netstandard1.4'をターゲットとする' csproj'でしょう。そのために 'xproj'は必要なく、プロジェクトからプロジェクトへの参照は簡単です。 –

+0

実際、2015年のアップデート2でそのリンクを見ることができます...この段階で2015.3 RCをインストールする価値はありますか?それはRCであるので、かなり安定しているはずです... –

関連する問題