Xamarin错误:Android上的System.Security.Cryptography中不存在Pkcs

时间:2015-04-09 20:01:39

标签: c# android mono xamarin

我收到错误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?

2 个答案:

答案 0 :(得分:1)

我非常确定Xamarin.Android(也不支持Xamarin.iOS)不支持System.Security.dll。 Xamarin.Android的文档可能存在错误。

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

在vs2010分支中,您将找到一个BouncyCastle.Android.csproj和一个BouncyCastle.iOS.csproj,您可以在定位其中一个Xamarin平台时使用。

我不确定您使用的是SignedCms,但由于它经常用于S / MIME,您可能对我的S / MIME库感兴趣,该库在Xamarin平台上运行,名为{{3使用前面提到的BouncyCastle fork。即使这不是你所需要的,你仍然可以查看一下如何使用BouncyCastle的加密来做相当于SignedCms的例子。查看MimeKitSecureMimeContext示例(特别是Sign()和EncapsulatedSign()方法)。 DefaultSecureMimeContext代码使用EncapsulatedSign()和Sign()方法中的System.Security.dll SignedCms API。

希望有所帮助。

答案 1 :(得分:0)

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