C# &引用;CryptographicException:找不到请求的对象;当证书文件存在时
我有一个C# &引用;CryptographicException:找不到请求的对象;当证书文件存在时,c#,cryptography,x509certificate,C#,Cryptography,X509certificate,我有一个.p12证书文件,我创建的证书如下: var certificate = new X509Certificate2(certFileLocation, "mySecret", X509KeyStorageFlags.Exportable); 当certFileLocation在我的桌面上,并且我给出了绝对路径时,代码就工作了。但是,当我将.p12文件的全部内容放入解决方案中的新文件中,并将文件的复制到输出目录属性设置为“如果更新,则复制”时,我会得到一个加密异常异常,该异常表示: 找不
.p12
证书文件,我创建的证书如下:
var certificate = new X509Certificate2(certFileLocation, "mySecret", X509KeyStorageFlags.Exportable);
当
certFileLocation
在我的桌面上,并且我给出了绝对路径时,代码就工作了。但是,当我将.p12文件的全部内容放入解决方案中的新文件中,并将文件的复制到输出目录
属性设置为“如果更新,则复制”时,我会得到一个加密异常
异常,该异常表示:
找不到请求的对象
每次我都会检查文件是否到位,是否正确。这两种情况之间的区别是什么?为什么不能用后一种方法读取文件?如果使用MS test,则需要更多位:
运行设置配置为在测试完成后不删除文件夹;这让我损失了30分钟的时间李>
将DeploymentItem
属性添加到您的TestMethod
。这会将其复制到您的Out
文件夹中
使用TestContext.DeploymentDirectory
作为“根”文件夹:
我也有类似的问题。它使用一个固定的文件,但不使用与我的单元测试相关的文件。这太让人麻木了,我终于看了一下这些文件,并将它们进行了二进制比较。他们在哪里不一样。它们被读写为字符串,这导致它们由于unicode解释而略有不同。当我自己(从资源流中)将它们复制为二进制(字节[])时,一切又恢复了正常。我希望这也能解决您的问题。certFileLocation的值是多少?此外,当您遇到异常时,您是否正在运行、调试或测试(MSTest)代码?certFileLocation
将是p12
文件的位置。这在调试时发生。
X509Certificate2 GetCert()
{
var stx = File.Open(Path.Combine(TestContext.DeploymentDirectory, "thecertfile.pfx"), FileMode.Open);
using (BinaryReader br = new BinaryReader(stx))
{
return new X509Certificate2(br.ReadBytes((int)br.BaseStream.Length), "password");
}
}
[TestMethod, DeploymentItem("thecertfile.pfx")]
public void Signing_FlameTest()
{
var cert = GetCert();
Assert.IsNotNull(cert, "GetCert failed");
}