Kam*_*mil 9 .net c# visual-studio nuget .net-standard
在这种情况下,我不知道如何设置依赖关系(在何处添加EntityFramework nuget包):
Core.Persistence编译为.NET Standard 2.0 DLL库的项目。我有Entity Framework 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当我尝试从中调用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项目输出,这就是为什么我会出错。
如何正确解决?
这是在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)