Xamarin error: Pkcs does not exist in System.Security.Cryptography on Android

Xamarin error: Pkcs does not exist in System.Security.Cryptography on Android

我收到错误 CS0234:类型或命名空间名称 'Pkcs' 在命名空间 'System.Security.Cryptography' 中不存在(是否缺少程序集引用?)为 Android 编译时.

代码是 Android 和 Mono 目标中引用的共享库。 Android的目标框架是4.4(试过5.0无果)。 Mono 是 .NET 4.5。

Android 的版本引用 Mono.Android 和 Mono.Security (2.0.5.0),Mono 版本 - System.Security 4.0.0.0.

如果我添加一个条件编译指令来关闭 Android 并只保留 Mono,它就会构建。

http://androidapi.xamarin.com/?link=T%3aSystem.Security.Cryptography.Pkcs.SignedCms 指出 Android 支持这一点。但是,Xamarin 不提供 System.Security.dll,而是在 Android.

的情况下提供 Mono.Security

如何在 Android 下获取 System.Security.Cryptography.Pkcs?

我很确定 System.Security.dll 不支持 Xamarin.Android(也不支持 Xamarin.iOS)。 Xamarin.Android.

的文档存在可能是个错误

我一直在维护 Bouncy Castle 密码学库的(轻微)分支,以便与 Xamarin.Android 和 Xamarin.iOS 一起使用:https://github.com/jstedfast/bc-csharp - 你会想看看vs2010 分支(我的更改不是在 master 分支上进行的)。

在 vs2010 分支中,您会找到一个 BouncyCastle.Android.csproj 和一个 BouncyCastle.iOS.csproj,您可以在针对其中一个 Xamarin 平台时使用它们。

我不确定您将 SignedCms 用于什么目的,但由于它经常用于 S/MIME,您可能会对我的 S/MIME 库感兴趣,该库在名为 [=11] 的 Xamarin 平台上运行=] 代码在 EncapsulatedSign() 和 Sign() 方法中使用 System.Security.dll SignedCms API。

希望对您有所帮助。

System.Security.* 代码目前正在 Mono 中得到改进,因此它最终也将在 Xamarin 平台上可用。具体来说,Pkcs 类 取自 .NET Core 托管实现,它们很可能随 Mono 5.18 一起提供。如果您现在想要什么,那么 BouncyCastle and the aforementioned MimeKit 可能是您唯一的选择。