Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;CryptographicException:找不到请求的对象;当证书文件存在时_C#_Cryptography_X509certificate - Fatal编程技术网

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");
    }