引用.NET Standard类库的WPF项目出现FileNotFoundException求助
解决.NET Framework WPF项目无法加载.NET Standard类库中EF Core依赖的问题
问题复现
你遇到的场景很典型:
- 使用Visual Studio 2019 (16.3.3) 创建了两个项目:
- .NET Standard 2.0类库:引用
Microsoft.EntityFrameworkCore 2.2.4,封装了自定义Repository类操作DbContext; - .NET Framework 4.7.1 WPF项目:引用上述类库,调用Repository时抛出
FileNotFoundException,提示找不到Microsoft.EntityFrameworkCore, Version=2.2.4.0,且WPF项目的bin\Debug目录下确实缺失该DLL。
- .NET Standard 2.0类库:引用
额外背景:
- 直接给WPF项目添加
Microsoft.EntityFrameworkCore.SqlServer等.NET Core包会生成大量<Reference>节点,不符合需求; - 记得旧项目需迁移为
PackageReference来传递间接依赖,但当前WPF项目没有packages.config,无法执行迁移操作。
核心原因
.NET Standard类库默认使用PackageReference管理NuGet依赖,而.NET Framework项目如果保留旧的packages.config格式,依赖无法自动传递;但你当前的WPF项目没有packages.config,说明它大概率已经默认使用PackageReference,问题出在依赖传递的配置或者项目引用的正确性上。
解决方案
1. 确认WPF项目的NuGet包管理格式
右键你的WPF项目 → 选择管理NuGet程序包 → 点击右上角的齿轮图标(设置) → 在包管理标签下,确认默认包管理格式是PackageReference。
- 如果不是,选择
PackageReference并应用,VS会自动转换项目的包管理方式(即使没有packages.config也能完成)。
2. 确保类库引用是项目引用而非DLL引用
右键WPF项目的引用节点 → 确认你添加的是项目引用(指向你的.NET Standard类库),而不是直接引用类库的输出DLL。
- 如果是直接引用DLL,NuGet的依赖传递机制不会生效,导致EF Core的DLL不会被复制到WPF项目的输出目录。
3. 强制触发依赖传递与重新构建
- 右键解决方案 → 选择清理解决方案;
- 手动删除WPF项目
bin和obj目录下的所有文件; - 右键解决方案 → 选择重新生成解决方案;
- 完成后检查WPF项目的
bin\Debug目录,确认Microsoft.EntityFrameworkCore.dll及相关依赖是否已被复制进来。
4. 手动添加最小化的EF Core依赖(备选方案)
如果上述方法仍无效,你可以在WPF项目中通过PackageReference添加Microsoft.EntityFrameworkCore 2.2.4包——这种方式不会生成大量<Reference>节点(因为是PackageReference格式),同时能确保依赖被正确引入。
补充说明
.NET Framework 4.7.1完全兼容.NET Standard 2.0,所以依赖传递的问题本质是NuGet包管理格式的配置问题,而非框架兼容性问题。你的旧解决方案能正常运行,大概率是因为旧项目已经正确配置了PackageReference格式。
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

