2012-06-19 36 views
6

Đầu tiên tôi có điều khiển ActiveX bên thứ ba mà tôi cần sử dụng.Không thể im lặng Nhúng Cảnh báo Interop

Tiếp theo, tôi phải sử dụng thư viện stdole để cấp dữ liệu cho bên thứ ba kiểm soát một số hình ảnh. Khi tôi biên dịch theo các thiết lập mặc định, tôi nhận được một số cảnh báo:

warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 

Dễ dàng đủ, tôi sẽ làm theo lời khuyên đó và thiết lập các loại Nhúng Interop false cho tài liệu tham khảo stdole. Tất cả mọi thứ có vẻ tốt cho đến khi tôi đi đến máy khách hàng bây giờ, khi đột nhiên ứng dụng được ném lên này:

Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

Vì vậy, tôi đoán đó là không sẽ xảy ra (mặc dù tôi không chắc chắn tại sao loại bỏ nhúng interop trên stdole có hiệu quả của việc làm cho thư viện không thể hoàn toàn được).

Vâng, chúng ta hãy đi theo cách khác và đánh dấu mọi thứ bằng Embed Interop true. OOPS! Lỗi biên dịch:

Error 2 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 
Error 1 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing the 'GuidAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 

Vì vậy, mọi lời khuyên về cách loại bỏ cảnh báo và có thứ gì đó có thể được xây dựng và chạy?

CẬP NHẬT

Hans passant gửi như một bình luận một câu trả lời mà không thực sự giải quyết vấn đề. Nếu anh ta reposts nó như là một câu trả lời tôi sẽ chấp nhận nó. Thật không may, tôi cũng gặp vấn đề tiêu chuẩn trong đó DLL được đặt thành Copy Local được sao chép độc đáo vào thư mục phát hành của dự án, nhưng sau đó sẽ không chuyển sang thư mục phát hành cuối cùng cho giải pháp (một tệp thực thi riêng biệt). Tôi đã giải quyết cho bây giờ bằng cách thêm một tham chiếu đến stdole trong thực thi của tôi. Tôi cho rằng đó có lẽ là đủ tốt.

+3

Bạn không thể nhúng loại cho thành phần ActiveX. Máy mục tiêu thiếu PIA cho stdole, hãy thử thiết lập thuộc tính Copy Local thành true và copy stdole.dll đã tạo ra. –

+0

Hans Passant một lần nữa! Bạn đang ở khắp mọi nơi, tôi thậm chí đã gặp bạn trên một điều không liên quan trước đó ngày hôm nay. Không biết tại sao Jon Skeet lại được báo chí. Tôi sẽ thử và báo cáo lại. – user12861

+0

@HansPassant xem cập nhật cho câu hỏi – user12861

Trả lời

3

Trả lời bởi Hans Passant:

Bạn không thể nhúng loại cho thành phần ActiveX. Máy mục tiêu thiếu PIA cho stdole, hãy thử thiết lập thuộc tính Copy Local thành true và copy stdole.dll đã tạo ra.

-2

Nếu bạn tạo dự án mới trong VS10, nó có thể sử dụng cấu hình máy khách .NET framework 4 làm mặc định, bạn có thể đặt khung đích thành Khuôn khổ .NET 4 trong thuộc tính dự án -> Trang tab.

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