2010-03-26 11 views
8

Tôi phải đăng ký nhiều assembly cho GAC bằng InstallSheild và tôi cũng cần các assembly được sao chép trên INSTALLDIR. Cách tốt nhất để làm điều đó là gì? Ngoài ra tôi cần phải gọi regasm.exe cho một hội đồng; tôi có thể làm điều này bằng InstallShield không?Đăng ký các assembly vào GAC bằng InstallShield

Tôi thực sự cần một 'thành phần' mới cho mỗi hội đồng phải được đăng ký trong GAC?

Trả lời

10

Câu trả lời này giả sử bạn đang sử dụng loại dự án Windows Installer.

1) Tạo một thành phần cho từng tệp DLL, đặt nó làm tệp tin chính và đặt thư mục đích thành GlobalAssemblyCache. Điều này hướng dẫn Windows Installer sử dụng hành động tiêu chuẩn MsiPublishAssemblies mà lần lượt thực hiện các cuộc gọi thành Fusion để đăng ký assembly trong GAC. Đây là những gì GACUTIL hiệu quả cho bạn. Hãy nhớ rằng: GACUTIL không thể phân phối lại được. Nếu hội đồng có tệp đồng hành, hãy thêm chúng dưới dạng tệp đồng hành vào cùng một thành phần.

2) Nếu lắp ráp của bạn là ComVisible, tạo một thành phần cho mỗi DLL, đánh dấu nó là keyfile và đặt .NET ComInterop thành true. Điều này sẽ làm cho thông tin COM được trích xuất tại thời gian xây dựng và yêu cầu Windows Installer sử dụng hành động chuẩn MsiPublishAssemblies để ghi thông tin vào sổ đăng ký. Lưu ý: Nếu bạn có mã người dùng tùy chỉnh trong phần đăng ký của hội đồng, điều này sẽ không bị bắt. Đây là mỗi MSDN rằng regasm /regfile không thực thi đường dẫn mã này. Bạn sẽ phải nhập thủ công thông tin này vào chế độ xem đăng ký của InstallShield cho thành phần đó.

3) Có, bạn có thể triển khai một hội đồng có tên mạnh mẽ cả trên toàn cầu và/hoặc tư nhân. Cho dù một tư nhân sẽ được nhìn thấy hay không phụ thuộc vào việc lắp ráp với tham chiếu có UseSpecific thiết lập hay không.

+0

Đẹp nhất để chạy bộ nhớ của tôi Chris! –

0

Có. Theo như hệ thống quan tâm, đó là hai tập tin khác nhau. AFAIK, bạn không thể có một tập tin trong GAC và có nó trong một thư mục ngẫu nhiên trên máy tính mục tiêu cùng một lúc.

Về mặt lý thuyết, nếu trong GAC, bạn không cần nó trong thư mục sản phẩm. Nếu nó nằm trong GAC, đó sẽ là phiên bản được tải, không phải là phiên bản trong thư mục sản phẩm. Tuy nhiên, nó sẽ khó hơn nếu bạn cần, nói, đăng ký nó cho COM interop quá. Tôi có thể sai, nhưng khi tôi cố gắng, tôi phải có cả hai: một trong thư mục, một trong GAC.

Nhưng thực sự, bạn có thể không cần nó trong GAC nếu bạn cần nó trong thư mục sản phẩm. Nếu nó được tải từ bất kỳ chương trình nào ở bất cứ đâu, luôn luôn, thì GAC là một nơi thích hợp cho nó. Nếu bạn đang đặt nó trong GAC cho COM interop, đó là không cần thiết; đăng ký nó bằng cách trỏ nó vào thư mục mà bạn đã cài đặt nó sẽ làm việc tốt nếu bạn có cấu hình installshield một cách chính xác.

+0

Tôi đã phát triển thanh công cụ cửa sổ trong C#. Trong trường hợp này, các dll phải ở trong GAC, phải không? – Cornel

+0

Không nhất thiết. Nếu người dùng thanh công cụ của bạn sử dụng nó trong ứng dụng của họ, thì họ chỉ cần nó trong thư mục ứng dụng của bạn. –