2012-04-19 52 views
5

Tôi có một thư viện lớp đã ký mà tôi muốn tạo các assembly thông qua công cụ sgen. Tuy nhiên, tôi nhận được một lỗi khi tôi cố gắng chạy lệnh sau:Không thể tạo một lớp tạm thời - Lỗi mật mã khi ký assembly

$ sgen.exe /a:testsign.dll /force /compiler:/keyfile:..\..\testsign.pfx /verbose /n
Error: Unable to generate a temporary class (result=1).
error CS1548: Cryptographic failure while signing assembly '[...path...]\TestSign.XmlSerializers.dll' -- 'Error signing assembly - - The parameter is incorrect. '

If you would like more help, please type "sgen /?".

Tôi đã kiểm tra các lỗi trên MSDN trong đó nêu rằng

CS1548 occurs when assembly signing fails. This is usually due to an invalid key file name, an invalid key file path, or a corrupt key file.

Tuy nhiên, tôi vừa tạo ra chìa khóa, con đường là chính xác và kiến ​​thức của tôi Visual Studio 2010 không tạo khóa bị hỏng.

Vấn đề này khá đơn giản để tái tạo.

  1. Sử dụng mã pasted here tạo thư viện lớp học mới.
  2. Tạo hai lớp, một lớp class TestSigning và một class Model
  3. Go to project properties> Ký kết và kiểm tra phần "Đăng nhập lắp ráp này"
  4. tạo một tên mạnh mới tập tin quan trọng
  5. mở Visual Studio Command Prompt (2010)
  6. xác định vị trí các dll và chạy sgen /a:<dllname> [... as above ...]

tôi đoán là cái gì đó với khóa công khai cho keyfile .. Nhưng tôi không thể tìm thấy bất kỳ nguồn như thế nào tôi thông báo sgen của mật khẩu nào tôi đã sử dụng để bảo vệ tệp khóa của mình.

Tôi không chắc chắn cách tiếp tục. các chủ đề khác mà tôi đã xem tại đây trên SO có cùng lỗi "tiêu đề" unable to generate temporary class nhưng các chi tiết lỗi khác nhau, mà không có chi tiết nào có số Cryptographic failure (mà tôi đã tìm thấy).

Trả lời

3

Làm theo hướng dẫn trong this thread giải quyết được sự cố này. Mặc dù nó không được thực hiện thủ công với công cụ sgen, nó đã được thực hiện thông qua Visual Studio.

Đó là, ví dụ trên được thay đổi thành:

  1. như trước
  2. như trước
  3. như trước
  4. như trước
  5. Đến Build tab
  6. Đặt Tạo hội đồng tuần tự hóa đến Trên
  7. Nhấp chuột phải dự án và lựa chọn dự án Unload
  8. Nhấp chuột phải dự án và chọn * chỉnh sửa nnn.csproj **
  9. Dán đoạn sau đâu đó

    <PropertyGroup> 
        <SGenUseProxyTypes>false</SGenUseProxyTypes> 
        <SGenPlatformTarget>$(Platform)</SGenPlatformTarget> 
    </PropertyGroup> 
    
  10. Nạp lại và xây dựng dự án.

+0

không làm việc :) Cùng một vấn đề kiên trì @Default –

+0

nó làm việc 3 năm trước, khi tôi đăng câu trả lời này. Nếu bạn gặp sự cố, tôi có thể đề xuất đăng câu hỏi mới không? (nếu bạn muốn bạn có thể liên kết đến câu hỏi này và giải thích lý do tại sao nó không giúp bạn để nó không được đóng lại như một bản sao) – Default

1

Ban đầu tôi có thể tạo dự án mà không bị trục trặc. Thật kỳ lạ khi một dự án đơn giản khác không thể xây dựng/xuất bản và đã ném lỗi này thay thế.

Tôi đã có thể tạo điều này sau khi tôi chạy Visual Studio dưới dạng Quản trị viên.

tham khảo: Gordon's 3log