我有一个.p12
证书文件,我创建了这样的证书:
var certificate = new X509Certificate2(certFileLocation, "mySecret", X509KeyStorageFlags.Exportable);
当certFileLocation
在我的桌面上并且我给出绝对路径时,代码可以正常工作。但是,当我将.p12文件的全部内容放在我的解决方案中的新文件中并将文件的Copy to Output Directory
属性设置为“Copy if newer”时,我得到{{1异常说:
找不到请求的对象
我每次都会检查文件是否到位而且确实存在。这两种情况有什么区别,为什么我不能用后一种方法读取文件?
答案 0 :(得分:3)
我有类似的问题。它使用固定文件但不适用于相对于我的单元测试的文件。这是如此令人费解,以至于我终于看了一下文件并将它们比作二进制文件。他们不相同的地方。它们被读取和写为字符串,由于unicode解释导致它们略有不同。当我自己(从资源流)将它们复制为二进制(byte [])时,一切都再次起作用。我希望这也能解决你的问题。
答案 1 :(得分:0)
如果您正在使用MS-test,则需要更多位:
runsettings
配置为不删除文件夹;这让我失去了30分钟的时间!DeploymentItem
属性添加到TestMethod
。这会将其复制到您的Out
文件夹。使用TestContext.DeploymentDirectory
作为" root"文件夹:
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");
}