2015-09-22 20 views
7

Tôi có một tập tin .p12 chứng chỉ và tôi có thể tạo giấy chứng nhận của tôi như thế này:"CryptographicException: Không thể tìm thấy đối tượng yêu cầu" trong khi tập tin giấy chứng nhận tồn tại

var certificate = new X509Certificate2(certFileLocation, "mySecret", X509KeyStorageFlags.Exportable); 

Khi certFileLocation là trên máy tính để bàn của tôi và tôi cung cấp cho các đường dẫn tuyệt đối , mã hoạt động. Nhưng khi tôi đưa toàn bộ nội dung của tệp .p12 chứng chỉ trong một file mới trong giải pháp của tôi và thiết lập Copy to Output Directory tài sản của các tập tin để "Sao chép nếu mới hơn" tôi nhận được một ngoại lệ CryptographicException nói rằng:

Can not tìm đối tượng được yêu cầu

Tôi cũng kiểm tra mỗi lần tệp có được đặt đúng vị trí hay không. Sự khác nhau giữa hai kịch bản này là gì và tại sao tôi không thể đọc tệp bằng cách tiếp cận thứ hai?

+0

Giá trị của 'certFileLocation' là gì? Ngoài ra khi bạn nhận được ngoại lệ là bạn đang chạy, gỡ lỗi hoặc thử nghiệm (MSTest) mã? –

+0

'certFileLocation' sẽ là vị trí của tệp' p12'. Điều này xảy ra khi tôi đang gỡ lỗi. – Disasterkid

Trả lời

0

Nếu bạn đang sử dụng MS-kiểm tra, bạn cần thêm một vài bit:

  1. chắc chắn rằng bạn runsettings được cấu hình để KHÔNG Xóa Folders sau khi kiểm tra được hoàn thành nếu bạn muốn xem bất kỳ sản lượng dịch vụ hậu mãi sự thật; điều này khiến tôi mất 30 phút!
  2. thêm thuộc tính DeploymentItem vào số TestMethod của bạn. điều này sẽ được sao chép vào thư mục Out của bạn.
  3. sử dụng TestContext.DeploymentDirectory như thư mục "gốc" của bạn:

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

Tôi đã có một vấn đề tương tự. Nó làm việc với một tập tin cố định nhưng không làm việc với các tập tin liên quan đến các bài kiểm tra đơn vị của tôi. Điều này là rất mindnumbling rằng tôi cuối cùng đã có một cái nhìn tại các tập tin và so sánh chúng nhị phân. Chúng ở nơi không phải là giống nhau. Chúng được đọc và viết thành các chuỗi, khiến chúng hơi khác nhau do các giải thích unicode. Khi tôi sao chép chúng bản thân mình (từ một resourcestream) như nhị phân (byte []), tất cả mọi thứ đã làm việc một lần nữa. Tôi hy vọng điều này giải quyết vấn đề của bạn quá.

Các vấn đề liên quan