You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.1 API调用.NET Framework 4.5.2类库方法报错求助

解决.NET Core 2.1调用.NET Framework类库时MACTripleDES加载失败的问题

这个错误的核心原因很明确:.NET Core 2.1的类库中并不包含System.Security.Cryptography.MACTripleDES类型,而你的类库是基于.NET Framework 4.5.2构建的——这个类型在.NET Framework里存在,但跨框架调用时,.NET Core无法找到它,所以抛出了加载失败的异常。

关于你提到的project.json,不用纠结它了:那是早期.NET Core 1.x版本使用的配置文件,从.NET Core 2.x开始已经全面改用.csproj格式,所以你的项目里没有这个文件是完全正常的。

下面给你几个可行的解决思路,按推荐优先级排序:

1. 迁移类库到.NET Standard并替换兼容的加密实现(最推荐)

这是长期来看最稳妥的方案,因为.NET Standard是专门为跨框架类库设计的,能同时兼容.NET Framework和.NET Core。

步骤:

  • 打开你的.NET Framework类库项目,右键选择「属性」,把目标框架改为**.NET Standard 2.0**(.NET Core 2.1完全支持这个版本)。
  • 修改加密方法,用.NET Standard兼容的类型替代MACTripleDES。你可以用HMACTripleDES——它和MACTripleDES都是基于TripleDES的消息认证码,只要密钥生成逻辑一致,加密结果会完全相同。修改后的代码如下:
public string Encryptor(string ID) 
{ 
    string EncrytionKey = "sampleKey"; 
    // 使用using语句自动释放资源,比原代码更安全
    using (var md5 = MD5.Create())
    using (var hmacTripleDes = new HMACTripleDES(md5.ComputeHash(Encoding.UTF8.GetBytes(EncrytionKey))))
    {
        byte[] idBytes = Encoding.UTF8.GetBytes(ID);
        string base64Id = Convert.ToBase64String(idBytes);
        byte[] macBytes = hmacTripleDes.ComputeHash(idBytes);
        string base64Mac = Convert.ToBase64String(macBytes);
        return $"{base64Id}-{base64Mac}";
    }
}
  • 重新编译类库,然后在你的.NET Core Web API项目中重新引用这个类库即可。

2. 临时启用.NET Core对.NET Framework类库的兼容性(不推荐长期使用)

如果暂时无法迁移类库,可以尝试在.NET Core项目中添加对.NET Framework特定API的兼容支持,但这个方法有局限性(比如跨平台运行可能出问题),只适合临时过渡:

步骤:

  • 右键你的.NET Core Web API项目,选择「编辑项目文件」(打开.csproj)。
  • 添加以下配置:
<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
  <!-- 启用.NET Framework兼容性模式 -->
  <EnableWindowsCompatibility>true</EnableWindowsCompatibility>
</PropertyGroup>
<ItemGroup>
  <!-- 添加必要的加密库引用 -->
  <PackageReference Include="System.Security.Cryptography.Algorithms" Version="4.3.0" />
</ItemGroup>
  • 保存后重新编译项目,尝试调用类库方法。注意:这个方法仅在Windows环境下可靠,Linux/macOS运行时可能依然出错。

3. 在.NET Core项目中重写加密逻辑

如果类库的其他功能你用不到,只是需要这个加密方法,也可以直接在你的.NET Core Web API项目中重写这段逻辑(用上面提到的HMACTripleDES实现),完全绕过对原类库的依赖。

这样既避免了跨框架的兼容性问题,也能保证代码在.NET Core环境下稳定运行。

内容的提问来源于stack exchange,提问作者Sreekanth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:48:24