ASP.Net Core 2.0应用无法加载Microsoft.ApplicationBlocks.Data程序集求助
解决ASP.NET Core 2.0引用依赖Microsoft.ApplicationBlocks.Data的.NET Framework类库时的FileNotFoundException
问题根源
Microsoft.ApplicationBlocks.Data是微软企业库(Enterprise Library)里的老牌数据访问组件,属于.NET Framework专属的类库。.NET Core 2.0虽然有限支持部分.NET Framework程序集,但这类老旧组件并没有被原生兼容,导致运行时无法自动定位加载对应的dll文件。
具体解决方案
1. 配置项目的.NET Framework兼容开关
打开你的ASP.NET Core 2.0项目的.csproj文件,添加以下配置,让项目允许引用并加载.NET Framework 4.6的类库:
<PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <!-- 声明兼容的.NET Framework版本 --> <TargetFrameworkVersion>v4.6</TargetFrameworkVersion> <!-- Windows环境下指定运行时标识,确保依赖的Windows API可用 --> <RuntimeIdentifier>win7-x64</RuntimeIdentifier> </PropertyGroup> <ItemGroup> <!-- 确保正确引用你的遗留类库 --> <Reference Include="YourLegacyLibrary"> <HintPath>..\YourLegacyProject\bin\Debug\YourLegacyLibrary.dll</HintPath> </Reference> </ItemGroup>
2. 手动引入Microsoft.ApplicationBlocks.Data程序集
- 找到
Microsoft.ApplicationBlocks.Data.dll(通常在企业库安装目录或遗留项目的输出目录中),将它复制到ASP.NET Core项目的输出目录(bin\Debug\netcoreapp2.0),或者直接添加为项目引用:
右键项目 → 添加 → 引用 → 浏览 → 选中该dll文件。 - 同时在
.csproj中设置编译时自动复制到输出目录:
<Reference Include="Microsoft.ApplicationBlocks.Data"> <HintPath>path\to\Microsoft.ApplicationBlocks.Data.dll</HintPath> <Private>True</Private> <!-- 确保dll被复制到输出目录 --> </Reference>
3. 迁移到.NET Core兼容的替代方案(推荐)
鉴于Microsoft.ApplicationBlocks.Data已经停止维护,长期依赖会带来兼容性和维护风险,建议逐步替换为.NET Core原生支持的方案:
- Dapper:轻量级ORM,用法和ApplicationBlocks.Data类似,完全适配.NET Core,学习成本低
- Entity Framework Core:微软官方的现代化ORM,功能更全面
如果业务允许,优先考虑将遗留类库中的数据访问逻辑迁移到这些组件上。
4. 确认运行环境限制
Microsoft.ApplicationBlocks.Data依赖Windows平台的特定API,所以你的ASP.NET Core应用必须运行在Windows环境下。如果是Linux/macOS等跨平台环境,这个组件本身无法正常工作,必须替换方案。
验证步骤
修改配置后,清理并重新编译项目,运行应用后调用遗留类库的静态方法,检查异常是否消失。如果仍有问题,可以查看输出目录是否存在Microsoft.ApplicationBlocks.Data.dll,并确认其版本是否与异常提示的Version=2.0.0.0一致。
内容的提问来源于stack exchange,提问作者Mog0




