在这种情况下,我不知道应该如何设置依赖项(在何处添加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
调用方法时,我得到了Core.Application
。
它表示找不到System.Interactive.Async
文件(它是对EntityFrameworkCore
的依赖)。在将此文件添加为依赖项之后,还有其他System.IO.FileLoadException
错误。
因此,我暂时将EF6 Core NuGet软件包添加到了Client.ConsoleClient
中,而System.IO.FileLoadException
的问题已经消失了,但是我觉得我做错了。
这时我发现,Visual Studio并未将DLL文件从Core.xxx
项目输出复制到Client.ConsoleClient
项目输出,这就是为什么我会出错。
如何正确解决此问题?
答案 0 :(得分:4)
这是一个众所周知且相当古老的伤害,登录到GitHub:
依赖项不会通过项目引用link
NET Standard
项目流到旧的桌面项目
一种可行的解决方案是像您一样将NuGet
依赖项添加到Full NET Framework
项目中。
将以下内容包含在.csproj
的{{1}}项目文件中的另一种建议对我也有用。
Full NET Framework project
请注意,我在<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
项目中使用了程序包引用。
就目前而言,看来NET Standard
项目最好以NET Standard
包的形式使用,因为它们会将任何依赖引用作为NuGet
包包含到目标项目中
Core.Persistence.csproj 引用NuGet
Entity Framework
Core.Application.csproj 引用<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.6" />
</ItemGroup>
</Project>
Core.Persistence
ConsoleClient.csproj 引用了<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Core.Persistence\Core.Persistence.csproj" />
</ItemGroup>
</Project>
Core.Application
答案 1 :(得分:2)
具有旧格式项目文件的新SDK格式csproj
文件don't play terribly well。
但是请不要担心,因为.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软件包。
如果Properties\AssemblyInfo.cs
中除版本1.0.0.0以外的任何内容,请在解决方案资源管理器中右键单击该项目,然后单击“打包”。添加所需的详细信息,然后保存:
就是这样,尽管您可能根据您的具体情况还需要做两件事:
如果有应排除的文件,则需要将其排除,因为新的项目格式默认包括所有相关文件类型。
您可能必须设置语言版本。在我的Visual Studio 2019预览版中,latest
(C#的最新次要版本)是默认设置,因此我不需要这样做。