2つのホストプロジェクト(1つは Webホスト 、もう1つは 汎用ホスト )と、これら2つのホストプロジェクトによって参照されるクラスライブラリプロジェクトを使用したソリューションがあります。
* .csprojファイルのルートタグ<Project>
の Sdk 属性では、両方のホストプロジェクト(Webホストと汎用ホスト)がMicrosoft.NET.Sdk.Web
を使用していますが、クラスライブラリプロジェクトはMicrosoft.NET.Sdk
を使用しています。
2つのホストプロジェクトは、Microsoft.AspNetCore.App
メタパッケージを参照します。
クラスライブラリプロジェクトはMicrosoft.NETCore.App
を使用していますが、ASP.NET Coreパッケージ(Microsoft.AspNetCore.App
にないMicrosoft.NETCore.App
のパッケージ)を個別に参照しています。
正しいSDKおよびメタパッケージについて:
1)汎用ホストプロジェクトでは、ASP.NET Coreの代わりに純粋な。NET Core(Microsoft.NET.Sdk
およびMicrosoft.NETCore.App
)を使用する必要があります(Microsoft.NET.Sdk.Web
およびMicrosoft.AspNetCore.App
)これはWebプロジェクトではないのですか?
2)クラスライブラリプロジェクトで、Microsoft.NET.Sdk
をMicrosoft.AspNetCore.App
とともに使用して、Microsoft.AspNetCore.App
に属するパッケージの異なるバージョンを参照する可能性を回避することは問題ありませんか(たとえば、ホストプロジェクトでは[email protected]
、クラスライブラリプロジェクトでは[email protected]
)。または、Microsoft.AspNetCore.App
メタパッケージをMicrosoft.NET.Sdk.Web
SDKでのみ使用できますか?
3)Microsoft.NET.Sdk
またはMicrosoft.NET.Sdk.Web
を使用するとどのような違いがありますか? docs はと言います。「SDKは、階層化ドキュメントで説明されているように、.NET CoreコードをビルドできるMSBuildタスクとターゲットのセットです。」 、しかし、なぜ両方を必要とするのですか?実際には、そのMicrosoft.NET.Sdk.Web
がしないMicrosoft.NET.Sdk
は何ですか?
広告(1)と(3):「コア」とWeb SDKの違いは何ですか、これらは一般的なホストアプリにどのように影響しますか?
最も重要な違いは次のとおりです。
デフォルトアイテム
Web SDKには、公開アプリケーションに含めるファイルのさまざまな定義とグロビングパターンがあります。
例えば。 appsettings.json
ファイルがある場合、.config
、.json
ファイルおよびwwwroot
フォルダー内のすべてのファイルがすべてであることを保証するパターンがあるため、Web SDKを使用するプロジェクトには自動的に含まれますパブリッシュ出力の一部。 これらのパターンについてはGitHubのMSBuildソースコード を参照してください。
汎用ホストがあり、Web SDKを使用しない場合は、csprojファイルにコードを追加して、どのファイルを発行ディレクトリにコピーするかを指定する必要があります(またはIDEを使用して「出力ディレクトリにコピー」設定を変更します。この設定では、パブリッシュ出力にもファイルが含まれますが、ビルド出力にもコピーされます)。
<ItemGroup>
<None Update="*.json" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
Web公開ロジック
Web SDKのもう1つの重要な部分は、Webアプリケーションの展開ロジックが含まれていることです。
発行プロファイル(.pubxml
ファイル)を使用するか、MSBuild/MSDeployを使用してAzureまたはファイルシステムにデプロイする場合、この発行ロジックが必要になります。
広告(2):クラスライブラリに使用するSDK
パブリックライブラリを公開する際の互換性を最大限にするには(NuGetなどを使用)、コアSDKを使用し、可能な限り低いバージョンの個々のパッケージを参照します2.1.0/2.1.1。
カミソリビューを含むクラスライブラリを開発する場合、Microsoft.NET.Sdk.Razor
SDKを使用してカミソリツールを取得する必要があります(たとえば、dotnet new razorclasslib
テンプレートを使用する場合)。
アプリケーションと同じメタパッケージ参照を使用するライブラリとテストプロジェクトの場合、現時点では事態は少し複雑ですが、改善されるでしょう:
ASP.NET Core 2.1ツール(!)(CLI 2.1。*)の場合、クラスライブラリに非Web SDKを使用し、そのパッケージのバージョン2.1.1を使用することをお勧めします。 NuGetがアップグレードを提供している場合でも、アップグレードしないでください。
2.1ツール(!)(CLI 2.1。*)のテストプロジェクトについては、少し異なり、注意が必要です。 統合および単体テストがASP.NET Core 2.1で動作しなくなり、実行時にアセンブリが見つからない =
2.2ツール(CLI 2.2.100+)以降、ASP.NET Coreメタパッケージへのバージョンレスパッケージ参照がコアSDKに移動されるため、「ASP.NET Core 2.1および2.2の両方でライブラリを開発し、プロジェクトをテストできます」バージョンレスパッケージ参照を使用した「コア」SDK(ツール2.2.100以降を使用する場合):
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
.NET Core/ASP.NET Core 3.0では、新しいメカニズムを使用してフレームワークを完全に参照できます(web-SDKは不要です)。
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>