我收到错误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?
答案 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的例子。查看MimeKit和SecureMimeContext示例(特别是Sign()和EncapsulatedSign()方法)。 DefaultSecureMimeContext代码使用EncapsulatedSign()和Sign()方法中的System.Security.dll SignedCms API。
希望有所帮助。
答案 1 :(得分:0)
现在,Mono中正在改进System.Security。*代码,因此最终它也将在Xamarin平台上可用。具体来说,Pkcs类是从.NET Core管理的实现中提取的,它们很可能随Mono 5.18一起提供。如果您现在想要一些东西,那么BouncyCastle和前面提到的MimeKit可能是您唯一的选择。