web-dev-qa-db-ja.com

.NET Standard 2.0を使用するときに依存関係を設定する方法DLL .NET Frameworkコンソールアプリケーションでライブラリを使用しますか?

このシナリオで依存関係(EntityFramework nugetパッケージを追加する場所)を設定する方法を理解できません。

  1. Core.Persistence .NET Standard 2.0にコンパイルするプロジェクトDLLライブラリ。EntityFramework 6を​​持っています。EF、DbContextなどのデータベースエンティティクラスです。EntityFrameworkCore

  2. Core.Domainプロジェクトも.NET Standard 2.0にコンパイルされますDLLライブラリ。ここにビジネスオブジェクトPOCOクラスを配置します。これには依存関係がないはずです。

  3. Core.Applicationプロジェクト、これは.NET Standard 2.0ですDLLライブラリ。ここにはすべてのアプリケーションロジックがあります。データベースクエリを実行するため、Core.Persistenceに依存します。Core.Domainクエリ結果からビジネスオブジェクトを生成するため。

  4. Client.ConsoleClientプロジェクト。 .NET Framework 4.7.2を実行可能にします。 Core.Applicationにのみ依存することになっていますが、ここで問題があります

  5. 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ファイルをコピーしていないことがわかりました。そのため、エラーが発生します。


これを正しく修正する方法は?

11
Kamil

新しいSDK形式のcsprojファイル ひどく上手く再生しないでください レガシー形式のプロジェクトファイルを使用します。

ただし、.NET FrameworkコンソールアプリはSDK形式を使用できるため、恐れる必要はありません。

作業がソース管理にコミットされていることを確認するか、フォルダーのコピーを作成してから、次の操作を行います。

  1. Properties\AssemblyInfo.csClient.ConsoleClientから削除します。そのファイルの内容がプロジェクトファイルに入るので、これはもう必要ありません。

  2. packages.configを削除します。ここでも、Nuget参照はプロジェクトファイルに保存されます。後でCore.Applicationを参照した後でNuget参照が必要な場合に使用します。

  3. テキストエディタでClient.ConsoleClient.csprojを開き、内容を次のように変更します。

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net472</TargetFramework>
      </PropertyGroup>
    </Project>
    
  4. Visual Studioでプロジェクトを再読み込みします。

  5. Core.Applicationへの参照を追加し、必要なNugetパッケージを追加します。

  6. 1.0.0.0のバージョン以外のコンテンツがProperties\AssemblyInfo.csにあった場合は、ソリューションエクスプローラーでプロジェクトを右クリックし、[パッケージ]をクリックします。必要な詳細を追加して保存します。

enter image description here

それだけですが、状況に応じてmightが実行する必要のある他の2つの処理があります。

  • 新しいプロジェクト形式にはデフォルトですべての関連ファイルタイプが含まれているため、除外する必要があるファイルがある場合は、それらを除外する必要があります。

  • 言語バージョンの設定が必要になる場合があります。私のVisual Studio 2019プレビューでは、latest(C#の最新のマイナーバージョン)がデフォルトなので、これを行う必要はありません。

2
Stephen Kennedy