Không thể tìm thấy chứng chỉ ký tên trong tệp lưu trữ chứng chỉ - ngay cả khi thêm khóa mới


153

Tôi không thể xây dựng các dự án với ký tên khóa mạnh mẽ - thông điệp trong tiêu đề luôn xuất hiện.

Có, dự án ban đầu được sao chép từ một máy khác. Tuy nhiên ngay cả khi tôi thêm khóa mới thông qua tab Ký trong Thuộc tính dự án, lỗi này vẫn được hiển thị.

Tôi đã thử chạy Visual Studio với tư cách Quản trị viên và đã thử thêm các khóa thủ công vào Cửa hàng Chứng chỉ Windows.

Cứu giúp!

Chỉnh sửa: Tôi không gặp lỗi này với một dự án mới, nhưng tôi rất muốn làm cho dự án hiện tại này hoạt động. Nó sẽ không hoạt động ngay cả khi tôi tạo chứng chỉ mới!


3
Loại dự án VS nào? Bạn đã bỏ chọn "Đăng ký bảng kê khai ClickOnce" trên Tab Ký kết thuộc tính dự án chưa?
Simon Mourier

@Simon Mourier, nếu tôi bỏ chọn tùy chọn đó thì tệp sẽ không được ký. Tôi muốn nó được ký kết! Đó là một dự án C #. Hoạt động tốt trên máy phát triển chính của tôi, không phải trên máy tính xách tay.
Marcus

Là thông báo lỗi được hiển thị trong nhật ký xây dựng của bạn, hoặc theo một cách khác? Nó có thể giúp nếu bạn sao chép và dán nhật ký.
Owen Wengerd

Một lỗi trong xây dựng nhật ký: “Không thể tìm thấy giấy chứng nhận ký manifest trong kho chứng chỉ”
Marcus

Tôi đã không nhìn thấy các dòng mã trong câu trả lời được chấp nhận. Nhưng điều này làm việc cho tôi: Tôi đã tạo một khóa mới trong VS2015. Tôi mở khóa Đăng ký hội và lưu. Sau đó, tôi nhấp vào nút Chọn từ Tệp, chọn tệp tôi vừa tạo, nhấp lại vào Ký tên tập hợp và lưu. Được xây dựng lại.
Tim

Câu trả lời:


234

Cuối cùng tôi đã tìm thấy giải pháp và thực sự hy vọng điều này cũng sẽ giúp người khác.

  1. Chỉnh sửa các .csprojtập tin cho dự án trong câu hỏi.
  2. Xóa các dòng mã sau:

    <PropertyGroup>
       <ManifestCertificateThumbprint>...........</ManifestCertificateThumbprint>
    </PropertyGroup>
    <PropertyGroup>
       <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    </PropertyGroup>
    <PropertyGroup>
       <GenerateManifests>true</GenerateManifests>
    </PropertyGroup>
    <PropertyGroup>
       <SignManifests>false</SignManifests>
    </PropertyGroup>
    

1
Làm việc cho tôi quá. Bất kỳ cảnh báo của hành động như vậy?
Bác sĩ mã hóa

1
Yup, đã xóa bất cứ thứ gì với "Manifest" và nó đã hoạt động :-)
s1cart3r

2
Tôi sẽ không làm điều này mà không biết những hậu quả ... dù sao đi nữa
barnacle.m

Trong trường hợp của tôi, Xóa ManifestCertificateThumbprintManifestKeyFilegiải quyết vấn đề.
Ahmed Shamel

Đã làm cho tôi. Không biết hậu quả của việc này là gì nhưng ít nhất một trong số đó là một dự án đang hoạt động nên điều đó đủ tốt cho tôi.
Parrotmaster

147

Chuyển đến "Thuộc tính" của dự án trong studio hình ảnh. Sau đó đi đến tab ký.

Sau đó, đảm bảo Ký vào lần nhấp khi bảng kê khai bị tắt.


Hướng dẫn cập nhật:

Trong Solution Explorer của bạn:

  1. nhấp chuột phải vào dự án của bạn
  2. bấm vào tài sản
  3. thường ở phía bên trái, chọn tab "Ký"
  4. kiểm tra ký vào bảng kê khai ClickOnce
  5. Hãy chắc chắn rằng bạn tiết kiệm!

nhập mô tả hình ảnh ở đây


2
Những gì bạn nói là tốt và nên làm việc nhưng không. Cuối cùng, tôi đã phải xóa các dòng mã như được đề cập trong câu trả lời dưới đây
Hamid Shahid

1
Điều này làm gì / hành động này có ý nghĩa gì?
LazerSharks

@TrailMix Nó sẽ sửa đổi tập tin cấu hình của bạn một cách thích hợp.
ADL

1
điều này đã cho tôi một giải pháp cho vs2010 :) lên!
Jace

1
Câu trả lời tốt đẹp! Tôi đang sử dụng VS2012 và nó thực sự hoạt động! +1
kiLLua

15

Thật đơn giản !!

Tôi đã giải quyết vấn đề này bằng cách làm theo các bước sau:

  1. Mở thuộc tính dự án img
  2. Nhấp vào Tab ký
  3. Và bỏ chọn "Đăng ký lắp ráp"

Đó là nó!!


13
  1. Mở tệp .csproj trong Notepad.
  2. Xóa các thông tin sau liên quan đến ký chứng chỉ trong kho chứng chỉ

    <PropertyGroup>
      <ManifestCertificateThumbprint>xxxxx xxxxxx</ManifestCertificateThumbprint>
      <ManifestKeyFile>xxxxxxxx.pfx</ManifestKeyFile>
    <GenerateManifests>true</GenerateManifests>
    <SignManifests>false</SignManifests>
    </PropertyGroup>
    

11

Hãy thử điều này: Nhấp chuột phải vào dự án của bạn -> Đến thuộc tính -> Click mà là phía bên trái của màn hình -> Bỏ chọn các Đăng nhấp một lần biểu hiện -> Save & xây dựng


6

Chuyển đến dự án của bạn "Thuộc tính" trong phòng thu trực quan. Sau đó đi đến tab ký.

Sau đó, đảm bảo Ký vào lần nhấp khi bảng kê khai bị tắt.

HOẶC LÀ

1.Mở tệp .csproj trong Notepad.

2. Xóa các thông tin sau liên quan đến việc ký chứng chỉ trong cửa hàng chứng chỉ xxxxx xxxxxx xxxxxxxx.pfx đúng sai `

Đã làm cho tôi.


3

Giả sử đây là chứng chỉ cá nhân được tạo bởi các cửa sổ trên hệ thống mà bạn đã sao chép dự án của mình, bạn có thể sử dụng trình quản lý chứng chỉ trên hệ thống hiện có dự án và nhập chứng chỉ. Bắt đầu trình quản lý chứng chỉ (certmgr) và chọn chứng chỉ cá nhân sau đó nhấp chuột phải vào bên dưới danh sách các chứng chỉ hiện có và chọn nhập từ các tác vụ. Sử dụng trình duyệt để tìm .pfx trong dự án (.pfx từ hệ thống trước đó mà bạn đã sao chép cùng với dự án). Nó nên ở trong thư mục con có cùng tên với thư mục dự án. Tôi quen thuộc với C # và VS, vì vậy nếu đó không phải là môi trường của bạn thì có lẽ .pfx sẽ ở nơi khác hoặc có thể đề xuất này không được áp dụng. Sau khi nhập, bạn sẽ nhận được một thông báo trạng thái. Nếu bạn đã thành công, lỗi chứng chỉ biên dịch sẽ không còn nữa.màn hình certmgr


Rõ ràng và súc tích!
Guido Leenders

0

Việc thêm các khóa thủ công vào kho chứng chỉ Windows là không đủ. Chứng chỉ chỉ chứa khóa công khai đã ký. Bạn cũng phải nhập khóa riêng được liên kết với khóa chung trong chứng chỉ. Tệp .pfx chứa cả khóa chung và khóa riêng trong một tệp. Đó là những gì bạn cần nhập.


Cảm ơn nhưng đã thử nó. Visual Studio sẽ tự động thêm chứng chỉ khi bạn tạo một chứng chỉ mới. Tuy nhiên tôi cũng đã thử thêm tệp .pfx bằng tay. Cửa sổ còn lại để cài đặt nó trong cửa hàng chứng chỉ chính xác và cũng thêm nó vào cửa hàng cá nhân của tôi.
Marcus

Khóa riêng không được lưu trữ trong kho chứng chỉ. Vui lòng đọc phần này, có thể nó sẽ giúp bạn hiểu được sự khác biệt: technet.microsoft.com/en-us/l
Library / cc962112.aspx

Tôi nên thêm rằng bạn có thể xác minh rằng khóa riêng được liên kết có sẵn bằng cách mở cửa sổ thuộc tính chứng chỉ trong trình quản lý chứng chỉ. Nếu khóa riêng có sẵn, văn bản sau sẽ được hiển thị ở dưới cùng của trang Chung: "Bạn có khóa riêng tương ứng với chứng chỉ này". Nếu bạn không thấy văn bản đó, khóa riêng sẽ không được cài đặt.
Owen Wengerd

Có, nó có ghi "Bạn có một khóa riêng tương ứng với chứng chỉ này".
Marcus

Tôi nghĩ rằng quy định ra chìa khóa hoặc chứng chỉ là vấn đề.
Owen Wengerd

0

Bạn nói rằng bạn đã sao chép các tập tin từ một máy tính khác. Sau khi bạn sao chép chúng, bạn đã 'Bỏ chặn' chúng chưa? Cụ thể, tệp .snk nên được kiểm tra để đảm bảo nó không được đánh dấu là không an toàn.


Nó không bị chặn, nó đến từ phần mềm đồng bộ hóa Windows Live Mesh. Tuy nhiên, điều đó không liên quan vì thậm chí việc tạo một khóa mới trong Visual Studio trên máy tính xách tay sẽ không hoạt động.
Marcus

0

Để ký một hội đồng với một tên mạnh bằng cách sử dụng các thuộc tính

Mở AssemblyInfo.cs(trong $(SolutionDir)\Properties)

các AssemblyKeyFileAttributehoặc AssemblyKeyNameAttribute, chỉ định tên của tập tin hoặc container chứa cặp khóa để sử dụng khi ký hợp đồng lắp ráp với một tên mạnh.

thêm mã sau đây:

[assembly:AssemblyKeyFileAttribute("keyfile.snk")]

Thêm dòng này không tạo ra sự khác biệt, tôi vẫn nhận được cùng một lỗi.
Marcus

0

Nếu bạn chỉ cần xây dựng dự án hoặc giải pháp cục bộ thì việc xóa ký có thể là một giải pháp đơn giản chết người như những người khác đề xuất.

Nhưng nếu bạn gặp lỗi này trên máy chủ xây dựng tự động hóa như TeamCity nơi bạn xây dựng các bản phát hành thực tế để triển khai hoặc phân phối, bạn có thể muốn xem xét cách bạn có thể cài đặt chứng chỉ này vào kho lưu trữ chứng chỉ trên máy xây dựng để bạn có được một gói đã ký ở cuối bản dựng.

Nói chung, không nên kiểm tra / cam kết bất kỳ chứng chỉ PFX nào trong kiểm soát nguồn, vì vậy cách bạn nhận tệp này trên máy chủ bản dựng của mình trong quá trình xây dựng là một câu hỏi khác, nhưng đôi khi mọi người có tệp này được lưu trữ cùng với giải pháp mã, vì vậy bạn có thể tìm thấy nó trong thư mục dự án.

Tất cả bạn cần làm chỉ là cài đặt chứng chỉ này trong tài khoản thích hợp trên máy chủ xây dựng của bạn.

  1. Tải xuống PsExec từ Windows Sysiternals .

  2. Mở một dấu nhắc lệnh và nhập thông tin sau. Nó sẽ sinh ra một dấu nhắc lệnh mới, chạy dưới dạng Hệ thống cục bộ (giả sử rằng TeamCity của bạn đang chạy trong tài khoản Hệ thống cục bộ mặc định):

    > psexec.exe -i -s cmd.exe

  3. Trong dấu nhắc lệnh mới này, thay đổi thư mục chứa chứng chỉ và nhập tên tệp để cài đặt (thay đổi tên tệp thành của bạn):

    > mykey.pfx

  4. Trình hướng dẫn Chứng chỉ Nhập sẽ khởi động. Nhấp qua và chọn tất cả các mặc định được đề xuất.

  5. Chạy bản dựng.

Tất cả các khoản tín dụng đều thuộc về Stuart Noble (và sau đó là Laurent Kempé tôi tin ☺).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.