2009-12-02 36 views
7

Tôi quản lý một dự án nguồn mở và muốn ký vào các tệp nhị phân được phát hành trong gói nhị phân của dự án. Tôi sử dụng Visual Studio csprojsln tệp để quản lý và xây dựng dự án của mình và cũng phân phối các tệp này như là một phần của gói nguồn của dự án.Cách được khuyến nghị để quản lý cặp khóa tên mạnh cho một dự án mã nguồn mở là gì?

Làm cách nào tôi có thể ký vào các tệp nhị phân đã tạo của bản dựng của mình và không phải phân phối tệp cặp khóa snk? Nếu tôi sử dụng Visual Studio để đăng ký các hội đồng, mỗi tệp dự án bây giờ cần một bản sao của cặp khóa để xây dựng. Tôi không thoải mái với việc phân phối cặp khóa, ngay cả khi nó được bảo vệ bằng mật khẩu.

Sửa:

caveat khác là một số hội đồng trong dự án truy cập người bạn cấp qua InternalsVisibleToAttribute, và xây dựng những bạn bè thông qua một tài liệu tham khảo dự án. Do đó, các hội đồng như vậy cần phải sử dụng một tên mạnh khi đề cập đến một hội đồng đã ký. Tuy nhiên, nếu cặp khóa không được phân phối thì làm thế nào để người dùng cuối có thể xây dựng các nguồn và duy trì các mối quan hệ dự án? Nếu sử dụng tệp cặp khóa tạm thời, mã thông báo khóa công cộng của các hội đồng đã ký có thay đổi hay không, vi phạm tham chiếu InternalsVisibleToAttribute?

Trả lời

2

Sharptooth's solution hoạt động tốt nếu tham chiếu lắp ráp duy nhất trong mã là những mã được mã hóa trong tệp dự án. Nếu dự án của bạn đề cập đến các hội đồng khác thông qua InternalsVisibleToAttribute hoặc các phương tiện khác mà một chuỗi tên mạnh là bắt buộc, thì không thể xây dựng các nguồn lưu trữ bằng khóa tạm thời. Làm như vậy sẽ thay đổi các tham chiếu khóa công khai có trong các chuỗi tên mạnh và phá vỡ mã.

Đây là trường hợp trong đơn đăng ký của tôi vì vậy tôi cần áp dụng một cách tiếp cận khác.

Tôi về cơ bản đã tạo một bản sao của các tệp slncsproj trong một hệ thống thư mục riêng biệt và sửa đổi các tệp csproj như sau.

  • Đã chuyển tất cả các tham chiếu tệp thành liên kết, trỏ đến nguồn gốc.
  • Sao chép và sửa đổi từng tệp AssemblyInfo.cs để chứa sử dụng InternalsVisibleToAttribute với tên mạnh.
  • Modified mỗi file csproj để các tập tin tài liệu tham khảo snk là một đường dẫn tương đối (loại bỏ sự cần thiết phải sao chép các tập tin snk cho từng dự án)

đầu tiên tôi đã làm tất cả những điều này bằng tay, nhưng sau đó nhận ra rằng điều này có thể được tự động một cách đơn giản. Các bước đầu tiên và thứ ba có thể được thực hiện với một XSLT, nơi mà bước thứ hai có thể được thực hiện với chức năng tìm kiếm/thay thế regex.

Vì tôi cần phải duy trì hai giải pháp ngay bây giờ, bạn nên tự động hóa tác vụ này để tránh đau đầu trong tương lai.

Các nguồn trong kho không xây dựng các hội đồng có tên mạnh, điều này là tốt, vì tôi không muốn áp đặt bất kỳ hạn chế hoặc quy trình xây dựng nào cho người dùng cuối.

7

Bạn không nên phân phối cặp khóa. Tên mạnh là để xác minh rằng phiên bản mới của hội đồng đến từ cùng một nhà xuất bản. Nếu một nhà phát triển khác muốn lập chi nhánh cho dự án của bạn, họ sẽ tạo ra cặp khóa riêng của họ và có hiệu quả cho thấy rằng phiên bản của họ không phải từ bạn sao cho các hội đồng khác phụ thuộc vào máy của bạn sẽ không tải nữa trừ khi chúng được biên dịch lại. Đó không phải lúc nào cũng thuận tiện nhưng nó bảo vệ bạn khỏi một người nào đó phát hành một phiên bản lắp ráp độc hại và âm thầm phân phối nó.

+0

Vì tôi cần phân phối tệp dự án và giải pháp và vì cặp khóa được yêu cầu cho giải pháp xây dựng (khi bật tính năng ký), tôi cũng nên phân phối cặp khóa "giả" sao cho người dùng cuối có thể xây dựng mà không cần phải thao tác các tệp dự án? Nó có vẻ cồng kềnh để kiểm tra các tệp dự án vô hiệu hóa việc ký, chỉ phải chuyển đổi cài đặt này mỗi lần phát hành. –

+2

Bạn có thể thực hiện các bước sau: thêm bước xây dựng để kiểm tra xem tệp .snk đã tồn tại chưa và chạy sn.exe để tạo tệp mới nếu cần. Sau đó, nó sẽ xây dựng ngay từ kho lưu trữ cho những người dùng khác. – sharptooth

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