已添加正确using指令但对象部分方法仍不可用问题咨询
问题根源
- Blue Prism 旧版本(v6及更早、部分v7早期版本)默认基于 .NET Framework 4.x 运行,而你调用的
ImportPkcs8PrivateKey、ImportRSAPrivateKey方法,以及ReadOnlySpan<T>结构体,都是 .NET Core 3.0 / .NET 5及更高版本 才新增的API,.NET Framework 4.x 原生不提供这些接口,所以会报方法不存在、类型找不到的错误。 - 你本地控制台程序能正常运行,是因为你创建的控制台项目目标框架为.NET Core/.NET 5+,和Blue Prism的运行环境不兼容。
解决方案
方案1:适配.NET Framework运行环境(兼容性最好,适配所有Blue Prism版本)
替换新API为.NET Framework支持的实现方式,读取PKCS8私钥可以用BouncyCastle库实现,步骤如下:
- 给你的类库项目安装BouncyCastle NuGet包:
Install-Package BouncyCastle - 替换私钥导入逻辑为兼容代码,示例:
using System.Security.Cryptography; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; // 输入PKCS8格式私钥字符串,返回RSA实例 public static RSA ImportPkcs8PrivateKeyForNetFx(string privateKeyStr) { // 去掉私钥的头尾标记(-----BEGIN PRIVATE KEY-----等) var privateKeyBits = Convert.FromBase64String(privateKeyStr .Replace("-----BEGIN PRIVATE KEY-----", "") .Replace("-----END PRIVATE KEY-----", "") .Replace("\r", "") .Replace("\n", "")); // 用BouncyCastle解析PKCS8私钥 var keyParameter = PrivateKeyFactory.CreateKey(privateKeyBits); var rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyParameter); // 导入到RSACryptoServiceProvider var rsa = new RSACryptoServiceProvider(); rsa.ImportParameters(rsaParams); return rsa; }
- 所有用到
ReadOnlySpan<T>的地方替换为byte[]数组实现即可。
方案2:升级Blue Prism运行环境(适合新版本Blue Prism)
如果你的Blue Prism是v7.1及以上版本,支持切换为.NET 6运行环境,直接将你的类库项目目标框架改为.NET 6,重新编译后导入Blue Prism即可原生调用你原来的代码,不需要修改逻辑。
内容的提问来源于stack exchange,提问作者PinguKing
相关产品推荐
相关产品推荐

