Tình hình là như sau:Phát hành nguồn thư viện lớp học mà không cần ký vào tệp khóa, nhưng các bài kiểm tra đơn vị yêu cầu quyền truy cập vào các lớp nội bộ, phải làm gì?
- Tôi muốn giải phóng nguồn đầy đủ đến một thư viện lớp
- Tôi muốn phát hành mã nhị phân là tốt, có chữ ký của tôi, với một tập tin quan trọng tôi không muốn xuất bản
- Tôi sẽ cung cấp các tệp lô và các bước tạo trước, tạo tệp khóa mới cục bộ nếu không có, để bất kỳ ai cũng có thể nhanh chóng bắt đầu sử dụng mã nguồn
- Dự án thử nghiệm cần tham chiếu đến lớp nội bộ dự án chính
- Để có quyền truy cập vào lớp nội bộ, tôi cần thêm thuộc tính
[assembly: InternalsVisibleTo("...")]
vào tệp AssemblyInfo.cs chính - Vì tôi đang ký kết đầu ra của dự án, tôi cần chỉ định phần PublicKey của thuộc tính đó
- Điều này sẽ được ràng buộc với tệp khóa, mà tôi không muốn xuất bản
Vì vậy, làm cách nào để giải quyết vấn đề này?
Nếu tôi ký vào đầu ra chính của dự án, và không phải là thư viện kiểm tra, và xác định chỉ có tên lắp ráp trong thuộc tính InternalsVisibleTo
, tôi có được điều này lỗi thời gian biên dịch:
Error 1 Friend assembly reference 'Mercurial.Net.Tests' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations. C:\Dev\VS.NET\Mercurial.Net\Mercurial.Net\Properties\AssemblyInfo.cs 22 31 Mercurial.Net
Vì vậy, rõ ràng là không ký kiểm tra đầu ra của dự án là không đủ.
Tùy chọn duy nhất của tôi là xóa cài đặt ký dự án và sửa đổi tệp dự án như một phần của tập lệnh xây dựng nhị phân của tôi? I E. truy tìm phần tử <SignAssembly>false</SignAssembly>
của tệp dự án và sửa đổi nó trước khi xây dựng?
Vâng, điều đó nghe giống như một kế hoạch. –
Tôi chỉ sử dụng '#if DEBUG', RELEASE-build hiện yêu cầu khóa riêng của tôi và tôi có thể dễ dàng viết kịch bản phần đó như một phần của tập lệnh sẽ tạo tệp nhị phân của tôi. Tôi chưa có mặt ở đó nên tôi sẽ xử lý phần đó sau. Tuy nhiên, lựa chọn tốt từ tất cả các câu trả lời ở đây, nhưng đây là những gì tôi đã làm, vì vậy chấp nhận điều này. –
Vâng, bạn đã đến. Mừng vì tôi có thể giúp. –