Как добавить ссылку на mshtml версии 9 в .NET - PullRequest
7 голосов
/ 02 марта 2012

Я хочу использовать некоторые новые функции mshtml.dll версии 9.0, такие как IHTMLCSSRule.

Версия взаимодействия в следующей папке - версия 7.0.3300.1:

.

C: \ Program Files \ Microsoft.NET \ Основные сборки взаимодействия \ Microsoft.mshtml.dll

Версия COM в следующей папке - версия 9.0.8112.16441:

C: \ Windows \ System32 \ mshtml.dll

Из того, что я мог узнать из Интернета, я должен сделать это для создания взаимодействия .NET версии 9:

d: \ zTemp> tlbimp mshtml.tlb /out:Microsoft.mshtml.dll / пространство имен: mshtml / asmversi on: 9.0

Кажется, это сработало, но выдало следующие предупреждения:

TlbImp: предупреждение TI3001: основная сборка взаимодействия 'Microsoft.mshtml, Version = 7. 0.3300.0, Культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a 'уже зарегистрирован для библиотеки типов' C: \ Windows \ system32 \ mshtml.tlb '. TLBIMP

: предупреждение TI3016: импортер библиотеки типов не смог преобразовать подпись для члена 'mshtml._userBITMAP.pBuffer'. TlbImp:

предупреждение TI3016: импортер библиотеки типов не смог преобразовать подпись для члена "mshtml._FLAGGED_BYTE_BLOB.abData". TlbImp:

предупреждение TI3015: хотя бы один из аргументов для 'mshtml.ICanvasPixel ArrayData.GetBufferPointer' нельзя маршалировать маршалером времени выполнения. Поэтому такие аргументы будут переданы как указатель и может потребовать небезопасного кода для m. TlbImp: Тип библиотека импортирована в d: \ zTemp \ Microsoft.mshtml.dll

  1. Можно ли безопасно игнорировать эти предупреждения?
  2. Нет ли предварительно скомпилированной версии этого dll, доступной для загрузки с сайта Microsoft?
  3. Это нормально для меня, чтобы распространять эту DLL с моим приложением?
  4. При добавлении ссылки на dll в проект .NET 3.5 я получил следующее предупреждение:

'Microsoft.mshtml.dll' или одна из его зависимостей требует более поздней версии версия .Net Framework, чем указанная в проекте ...

Поскольку это было предупреждение, и я могу добавить ссылку любым способом, могу ли я по-прежнему использовать некоторые функции .dll в .NET 3.5?

Спасибо

1 Ответ

4 голосов
/ 03 марта 2012

Это опасности COM-контроля версий, он же DLL Hell. PIA, установленная в GAC, является наименьшим общим знаменателем, она позволяет вашему коду работать с любой версией IE 6 и более поздних версий. Ваш подход в противном случае здоров. Предупреждения реальны, вы не можете использовать помеченные элементы из языка сценариев или любого другого клиента, который полагается на автоматизацию COM. Вы можете избежать неприятностей, просто не используя их, не сложно.

При добавлении ссылки вы получили ошибку, поскольку использовали неверную версию Tlbimp.exe. Вероятно, версия .NET 4, судя по сообщению об ошибке. Версия, совместимая с 3.5, находится в каталоге c: \ program files \ microsoft sdks \ windows \ v6.0a \ bin. Иначе тот, который вы получите при использовании командной строки VS2008. Проверьте, набрав where tlbimp.exe в командной строке.

Некоторые шансы, что вы загрузите PIA вместо вашей пользовательской сборки взаимодействия. Не уверен, что вы можете сказать из Fuslogvw.exe, настроенный на запись всех привязок. Ваша / asmversion должна избегать этого. Лучше всего создать полностью фиктивный номер версии, чтобы он никогда не совпадал с версией PIA, например 1.0.0.0

И, конечно, ваша программа не будет работать на компьютере пользователя, если на нем не установлен IE9.

...