したい:
IQueryable<T>
_に依存しますが、サードパーティの依存関係は使用しません(まあ、_JetBrains.Annotations
_)。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アプリからも参照できるようにするためです。これは本当に正しいアプローチですか、それとも間違った方向から始めましたか?
現在、C#プロジェクトを作成するには、xproj
とcsproj
の2つの方法があります。両方にproject.json
を使用していると仮定すると、それはプロジェクトの種類によって異なります。xproj
の場合、project.json
にはプロジェクトのビルドに必要なすべてが含まれます。 csproj
の場合、Nuget依存関係のみが含まれます。
ただし、UWPなどの一部のプロジェクトタイプは、xproj
/project.json
がサポートするものよりも複雑なビルドパイプラインが必要なため、xprojでビルドできません。 (ところで、これがmsbuildに戻る主な理由の1つでした。)
.NET Standardベースのクラスライブラリを作成するには、2つの方法があります。xproj
をproject.json
と共に使用することもできます。または、通常のcsproj
"Portableを作成することもできます。クラスライブラリ」プロジェクト。 VS 2015 Update 3 RCでは、PCLを変更して.NET Standardバージョン(PCLプロファイルの代わりにnetstandard1.x
、259など)をターゲットにできます。
csproj
ベースのクラスライブラリを使用してnetstandard1.x
を対象とする場合、プロジェクト参照を追加するときに問題なく機能するはずです。 UWPは現在、 プラットフォームマップ に基づいてnetstandard1.4
までサポートしていることに注意してください。問題は、代わりにxproj
/project.json
ベースのプロジェクトを使用するかどうかです。今日xproj
を使用する主な理由の1つは、複数のターゲットフレームワーク間のクロスコンパイルを有効にすることです。つまり、プロジェクトから複数の出力を作成します。これは、互換性のあるプロジェクトから参照できる単一の出力を作成することとは異なります。どちらにも用途がありますが、ニーズによって異なります。
xproj
ベースのクラスライブラリを作成する場合は、[参照の追加]ダイアログが機能しない場合(UWPプロジェクトまたは他の互換性のあるプロジェクトタイプから参照するために使用できる回避策があります) csproj
-> xproj
はほとんど壊れているため)ダイアログを使用する代わりに、次のようにcsproj
の出力を指すようにUWP xproj
を編集します。
<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プロジェクトを右クリックし、[ビルドの依存関係->プロジェクトの依存関係]を選択します。そのダイアログで、xprojのボックスをチェックして、VS/MSbuildが最初にビルドすることを確認します。
ここで完全なRx.NETソリューションを見ることができます。これには、上記のxproj->xproj
参照とUWP-> xproj
参照が含まれます。
新しいプロジェクトテンプレート/.xprojの動作は少し異なります。新しいクラスライブラリ(およびアプリケーションテンプレート)は、プレーンアセンブリではなく、nugetパッケージを生成します。
そのnugetパッケージ内には、すべてのターゲットが含まれています。つまり、他のnugetパッケージを追加するのと同じ方法で新しいプロジェクトを追加します。nugetをnugetフィードに入れ、Visual Studioでこれを参照してからそこから取得します。
実行中のNugetサーバーがない場合(Visual Studio Team Services + NuGetパッケージ、myget、セルフホスト)、パッケージをフォルダー(ローカルまたはネットワーク共有)に入れて、このフォルダーをNugetソースとして追加することもできます。
それがあまりにも多くの場合、1つのフォルダーに2つのプロジェクトを作成することもできます:* .csprojと* .xproj。 * .csprojは.NET 4.6 Frameworkを対象とし、*。xprojは上記のように残り、複数のターゲットを持ちます。この設定では、参照を追加するだけで、以前と同じ方法でプロジェクトを参照できます(同じソリューション内にある場合)。