2015-06-05 14 views
9

Tôi đang gặp nhiều khó khăn khi cố gắng ký một dự án thư viện lớp F #. Trước tiên, tôi đã thử điều này thread, sử dụng AssemblyKeyFileAttribute nhưng không thành công. Tôi cũng đã cố thêm cờ "--keyfile: keyfile.snk" vào thuộc tính dự án (trường "Cờ khác" trong tab "Xây dựng") và nó cũng không hoạt động. Tôi đang sử dụng Visual Studio 2013 và nó không hiển thị tab "Ký" giống như các dự án thư viện lớp C#.Ký F # Hội

Tất cả những nỗ lực kết quả trong các lỗi sau:

FSC: Lỗi FS2014: Một vấn đề xảy ra văn bản nhị phân 'obj \ phát hành \ ExcelFinancialFunctions.dll': Một cuộc gọi đến StrongNameGetPublicKey thất bại (Giá trị không thuộc phạm phạm vi dự kiến.)

Tôi đang làm gì sai?

Trả lời

6

FWIW, đây là cách tôi ký ZeroToNine: Thay vì sử dụng Visual Studio, tôi làm điều đó như một phần của tập lệnh xây dựng. Về cơ bản, nó được thực hiện bằng cách sử dụng AssemblyOriginatorKeyFileSignAssembly:

MSBuild.exe /property:AssemblyOriginatorKeyFile=mykey.snk /property:SignAssembly=true 

Bạn có thể thấy (gần như) tất cả các chi tiết thực dụng trong repo ZeroToNine, bao gồm the actual build script I use for signing. Các chi tiết duy nhất còn thiếu trong repo công cộng là tệp .snk thực tế, bởi vì nó sẽ không có ý nghĩa để có một tên khóa mạnh nếu nó được công bố công khai.

Đây là cách tôi gọi là xây dựng kịch bản từ Bash:

build-release.sh ../ZeroToNine.snk 

Như bạn thấy, tôi có tập tin .snk tôi cư trú bên ngoài của repo, và vượt qua nó như một cuộc tranh cãi kịch bản.

+0

Đây thực sự là một giải pháp tốt. Tôi không biết rằng msbuild có cơ chế ký riêng của nó, tuy nhiên tôi đã giải quyết vấn đề ký bằng cách sử dụng ilmerge (trình liên kết lắp ráp - al didnt cũng đã làm việc!) Mặc dù đó không phải là mục đích ilmerge. Vì đây là một giải pháp tốt hơn so với tôi, tôi sẽ đánh dấu nó là câu trả lời đúng. Cảm ơn! –

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