当我将.NET Standard 2.0 DLL库与.NET Framework控制台应用程序一起使用时,如何设置依赖项?

Kam*_*mil 9 .net c# visual-studio nuget .net-standard

在这种情况下,我不知道如何设置依赖关系(在何处添加EntityFramework nuget包):

  1. Core.Persistence编译为.NET Standard 2.0 DLL库的项目。我有Entity Framework 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当我尝试从中调用method时遇到了问题Core.Application

它说找不到System.Interactive.Async文件(是的依赖项EntityFrameworkCore)。在我将此文件添加为依赖项之后-还有其他System.IO.FileLoadException错误。

因此,我暂时将EF6 Core NuGet软件包添加到了我的Client.ConsoleClient,问题System.IO.FileLoadException已经消失了,但是我感觉自己做错了。

此时,我发现Visual Studio并未将DLL文件从Core.xxx项目输出复制到Client.ConsoleClient项目输出,这就是为什么我会出错。


如何正确解决?

pfx*_*pfx 5

这是在GitHub上记录的一个众所周知且相当古老的伤害:
依赖项不会NET Standard通过项目引用链接从新项目流到旧的桌面项目

一种可能的解决方案是像您一样将NuGet依赖项添加到Full NET Framework项目中。

将以下内容包含到的.csproj项目文件中的另一个建议Full NET Framework project对我也有用。

<PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

请注意,我在NET Standard项目中使用包引用。

到目前为止,似乎NET Standard最好将项目作为NuGet软件包使用,因为这些项目会将所有依赖引用作为NuGet软件包包含在目标项目中。


Core.Persistence.csproj引用Entity Framework

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

Core.Application.csproj引用Core.Persistence

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <ProjectReference Include="..\Core.Persistence\Core.Persistence.csproj" />
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

ConsoleClient.csproj引用Core.Application

<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
        <!-- ... -->
    </PropertyGroup>
    <PropertyGroup>
        <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
    </PropertyGroup>        

    <!-- ... --->

    <ItemGroup>
        <ProjectReference Include="..\Core.Application\Core.Application.csproj">
            <Project>{067b3201-3f65-4654-a0fb-e8fae521bf29}</Project>
            <Name>Core.Application</Name>
        </ProjectReference>
    </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)