2012-03-02 22 views
7

Tôi muốn sử dụng một số tính năng mới của phiên bản mshtml.dll 9.0 như IHTMLCSSRule.Cách thêm tham chiếu vào mshtml phiên bản 9 trong .NET

Phiên bản interop trong thư mục sau đây là phiên bản 7.0.3300.1:

C: \ Program Files \ Microsoft.NET \ Primary Interop Assemblies \ Microsoft.mshtml.dll

COM phiên bản trong thư mục sau đây là phiên bản 9.0.8112.16441:

C: \ Windows \ System32 \ Mshtml.dll

Từ những gì tôi có thể xác định từ các trang web, tôi nên làm điều này để tạo ra một phiên bản .NET interop 9:

d: \ zTemp> Tlbimp mshtml.tlb /out:Microsoft.mshtml.dll/namespace : mshtml /asmversi trên: 9,0

Điều này dường như đã làm việc nhưng tạo ra những lời cảnh báo sau đây:

tlbimp: TI3001 cảnh báo: Primary interop assembly 'Microsoft.mshtml, Phiên bản = 7. 0.3300.0, Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a 'đã được đăng ký d cho thư viện kiểu' C: \ Windows \ system32 \ mshtml.tlb '. TlbImp

: cảnh báo TI3016: Trình nhập thư viện loại không thể chuyển đổi chữ ký cho thành viên 'mshtml._userBITMAP.pBuffer'. Tlbimp:

cảnh báo TI3016: Các nhà nhập khẩu loại thư viện không thể chuyển đổi chữ ký cho thành viên 'mshtml._FLAGGED_BYTE_BLOB.abData'. Tlbimp:

cảnh báo TI3015: Ít nhất một trong các đối số cho 'mshtml.ICanvasPixel ArrayData.GetBufferPointer' không thể được marshaled bởi marshaler runtime. Do đó, các đối số như vậy sẽ được chuyển thành một con trỏ và có thể yêu cầu mã không an toàn đến m anipulate. Tlbimp: Loại thư viện nhập khẩu để d: \ zTemp \ Microsoft.mshtml.dll

  1. thể những cảnh báo này được bỏ qua một cách an toàn?
  2. Không có phiên bản biên dịch sẵn của tệp này có sẵn để tải xuống từ trang web microsoft không?
  3. Tôi có thể phân phối tệp này cùng với ứng dụng của tôi không?
  4. Khi thêm một tham chiếu đến các dll cho một dự án .NET 3.5 Tôi đã được đưa ra cảnh báo sau đây:

'Microsoft.mshtml.dll', hoặc một trong các phụ thuộc của nó đòi hỏi phải có một phiên bản sau này của .Net Framework so với quy định trong dự án ...

Vì đây là cảnh báo và cho phép tôi thêm tham chiếu vào bất kỳ cách nào, tôi vẫn có thể sử dụng một số tính năng của .dll trong .NET 3.5?

Cảm ơn

Trả lời

4

Đây là những mối nguy hiểm của phiên bản COM, aka DLL Hell. PIA bạn đã cài đặt trong GAC là mẫu số chung thấp nhất, nó làm cho mã của bạn hoạt động với bất kỳ phiên bản nào của IE 6 trở lên. Cách tiếp cận của bạn là âm thanh khác. Các cảnh báo là có thật, bạn không thể sử dụng các thành viên bị gắn cờ từ một ngôn ngữ kịch bản hoặc bất kỳ ứng dụng khách nào khác dựa vào tự động hóa COM. Bạn tránh xa rắc rối bằng cách đơn giản là không sử dụng chúng, không khó.

Bạn gặp lỗi khi thêm tham chiếu vì bạn đã sử dụng phiên bản sai của Tlbimp.exe. Có lẽ là phiên bản .NET 4, đánh giá từ thông báo lỗi. Phiên bản 3.5 tương thích nằm trong c: \ program files \ microsoft sdks \ windows \ v6.0a \ bin. Nếu không, một trong những bạn sẽ nhận được khi bạn sử dụng dấu nhắc lệnh VS2008. Xác minh bằng cách nhập where tlbimp.exe tại dấu nhắc lệnh.

Một số tỷ lệ cược mà bạn sẽ nhận được PIA được tải thay vì lắp ráp interop tùy chỉnh của bạn. Không chắc chắn, bạn có thể nói từ Fuslogvw.exe, cấu hình để đăng nhập tất cả các ràng buộc. Của bạn/asmversion nên tránh nó. Cách tốt nhất để tạo số phiên bản hoàn toàn không có thật để nó không bao giờ khớp với phiên bản PIA, như 1.0.0.0

Và, tất nhiên, chương trình của bạn sẽ không hoạt động trên máy của người dùng khi chưa cài đặt IE9.

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