このシナリオで依存関係(EntityFramework nugetパッケージを追加する場所)を設定する方法を理解できません。
Core.Persistence
.NET Standard 2.0にコンパイルするプロジェクトDLLライブラリ。EntityFramework 6を持っています。EF、DbContextなどのデータベースエンティティクラスです。EntityFrameworkCore
。
Core.Domain
プロジェクトも.NET Standard 2.0にコンパイルされますDLLライブラリ。ここにビジネスオブジェクトPOCOクラスを配置します。これには依存関係がないはずです。
Core.Application
プロジェクト、これは.NET Standard 2.0ですDLLライブラリ。ここにはすべてのアプリケーションロジックがあります。データベースクエリを実行するため、Core.Persistence
に依存します。Core.Domain
クエリ結果からビジネスオブジェクトを生成するため。
Client.ConsoleClient
プロジェクト。 .NET Framework 4.7.2を実行可能にします。 Core.Application
にのみ依存することになっていますが、ここで問題があります。
Client.WindowsClient
この質問に集中したくないプロジェクト。
だから、これは私がやったことです:
問題は、System.IO.FileLoadException
からメソッドを呼び出そうとするとCore.Application
を取得することです。
System.Interactive.Async
ファイル(EntityFrameworkCore
の依存関係)が見つからないと表示されています。このファイルを依存関係として追加した後、他のSystem.IO.FileLoadException
エラーがあります。
そのため、一時的にEF6 Core NuGetパッケージをClient.ConsoleClient
に追加しましたが、System.IO.FileLoadException
の問題はなくなりましたが、何か間違っているように感じます。
この時点で、Visual StudioがCore.xxx
プロジェクトの出力からClient.ConsoleClient
プロジェクトの出力にDLLファイルをコピーしていないことがわかりました。そのため、エラーが発生します。
これを正しく修正する方法は?
新しいSDK形式のcsproj
ファイル ひどく上手く再生しないでください レガシー形式のプロジェクトファイルを使用します。
ただし、.NET FrameworkコンソールアプリはSDK形式を使用できるため、恐れる必要はありません。
作業がソース管理にコミットされていることを確認するか、フォルダーのコピーを作成してから、次の操作を行います。
Properties\AssemblyInfo.cs
をClient.ConsoleClient
から削除します。そのファイルの内容がプロジェクトファイルに入るので、これはもう必要ありません。
packages.config
を削除します。ここでも、Nuget参照はプロジェクトファイルに保存されます。後でCore.Application
を参照した後でNuget参照が必要な場合に使用します。
テキストエディタでClient.ConsoleClient.csproj
を開き、内容を次のように変更します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
</Project>
Visual Studioでプロジェクトを再読み込みします。
Core.Application
への参照を追加し、必要なNugetパッケージを追加します。
1.0.0.0のバージョン以外のコンテンツがProperties\AssemblyInfo.cs
にあった場合は、ソリューションエクスプローラーでプロジェクトを右クリックし、[パッケージ]をクリックします。必要な詳細を追加して保存します。
それだけですが、状況に応じてmightが実行する必要のある他の2つの処理があります。
新しいプロジェクト形式にはデフォルトですべての関連ファイルタイプが含まれているため、除外する必要があるファイルがある場合は、それらを除外する必要があります。
言語バージョンの設定が必要になる場合があります。私のVisual Studio 2019プレビューでは、latest
(C#の最新のマイナーバージョン)がデフォルトなので、これを行う必要はありません。