2009-04-28 10 views
8

Chúng tôi có một bộ các thành phần COM được phát triển trong VC++. Khi một tham chiếu đến thành phần đó được thêm vào một dự án .NET Visual Studio tạo ra một hội đồng interop. Chúng tôi có một tập hợp các hội đồng như vậy ngay bây giờ.Nên lắp ráp hội đồng interop?

Trong khi chạy bản dựng hàng ngày, chúng tôi ký tất cả các tệp nhị phân được tạo bằng chữ ký điện tử. Interop hội đồng không được ký kết vì chúng tôi không cảm thấy chúng tôi là tác giả - bất cứ ai có thể sử dụng Visual Studio và sản xuất cùng một hội đồng.

Chúng ta cũng nên ký hợp đồng interop không? Chúng ta cũng nên ký tên với một tên mạnh (tiện ích sn.exe)? Những lý do để làm như vậy là gì?

Trả lời

8

Đây là một sự cân bằng phức tạp trong một thời gian. Vấn đề xuất phát từ thực tế là bạn cần phải phân phối các hội đồng Interop của bạn với mã số bạn có thể đang ký hợp đồng của riêng bạn. Nếu bạn đăng ký hội đồng của bạn thì tất cả các hội đồng mà nó tham chiếu cũng phải được ký - bao gồm cả các hội đồng Interop. Vì vậy, bạn phải ký chúng.

Nếu bạn đang phân phối một ứng dụng độc lập thì không có rủi ro và bạn chỉ cần đi trước và ký tên vào hội đồng để làm cho cuộc sống của bạn dễ dàng hơn.

Nếu bạn đang phân phối thư viện thành phần, mọi thứ có thể phức tạp hơn một chút vì nhà phát triển khác sử dụng thư viện của bạn có thể tạo cụm hội thoại của riêng họ nhưng ký tên bằng khóa riêng của họ. Điều này gây ra tất cả các loại vấn đề đặt tên và phụ thuộc.

Tùy thuộc vào mức độ phức tạp của các hội đồng Interop của bạn - bạn có thể tạo mã proxy thành một tệp .CS/.VB riêng biệt và biên dịch trực tiếp vào hội đồng của bạn. Sau đó, bạn sẽ không phải lo lắng về các vấn đề tên mạnh.

+0

Tôi đã đăng một câu hỏi theo dõi về việc tạo ra các proxy COM Interop để C# mã nguồn: http://stackoverflow.com/questions/1058289/how -do-i-generate-com-interop-proxy-vào-c-source-code –

3

Chúng tôi sử dụng Sn.exe để đặt tên cho các hội đồng interop được sản xuất bởi các công cụ như trình bao bọc xung quanh các đối tượng COM. Chúng ta cần phải làm điều này khi các hội đồng nạp chúng được ký kết, do đó chúng cần được ký kết.

Để tạo các hội đồng interop chúng tôi sử dụng:

tlbimp Some_COM.dll /delaysign /publickey:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 

Rõ ràng xóa/delaysign nếu bạn đang đăng ký đầy đủ.

Vì không cho phép các assmeblies, điều này có thể là trường hợp, nhưng bạn chịu trách nhiệm cho họ. Bạn muốn đảm bảo rằng họ không được thay thế (vô tình hay không) bởi bất kỳ ai khác, vì vậy bạn có thể nên áp dụng cùng một cấp ký tên/tên mạnh khi bạn áp dụng cho mã khác của mình.

0

Thay thế "PublicKey" bởi "keyfile":

tlbimp Some_COM.dll /delaysign /keyfile:"Some_PublicKey.snk" /out:Some_COM2Lib.dll" 
+0

Và điều gì sẽ xảy ra? – sharptooth