MSHTML DLL для Windows 10

У меня есть решение С#, которое использует Редактор HTML Смита (я разрабатываю основной проект, который использует это, поэтому я не знаю много о эта библиотека), которая делает ссылку на MSHTML. Это работало нормально до моего обновления до Windows 10, и он больше не может найти MSHTML. Я могу напрямую ссылаться на DLL в папке GAC, и он перестает жаловаться и, следовательно, строит, но получает некоторые ошибки времени выполнения, связанные с тем, что редактор не создает экземпляры.

После небольшого исследования выясняется, что MSHTML поэтапно отключен от Windows 10, поскольку теперь он использует EdgeHTML. Кто-нибудь знает, как я могу обойти это?

Решение по-прежнему работает для Windows 7.

Ответ 1

Я только что создал сообщение в блоге по этой проблеме. Проблема в том, что сборка Microsoft.mshtml.dll в глобальном кэше сборок становится незарегистрированной из ActiveX во время процесса обновления. Чтобы исправить эту проблему, необходимо запустить "regasm" на сборке:

  • Откройте экземпляр "Командная строка разработчика для VS2013" (или любая версия Visual Studio, которую вы используете). Запустите его как администратор, щелкнув правой кнопкой мыши значок и выбрав "Запуск от имени администратора".
  • Перейдите к разделу "C:\Windows\assembly\GAC\Microsoft.mshtml\7.0.3300.0__b03f5f7f11d50a3a". Возможно, ваш путь будет отличаться. Чтобы проверить, перейдите в раздел "C:\Windows\assembly\GAC\Microsoft.mshtml" и введите "dir".
  • Как только вы вернетесь к правильному пути, введите regasm Microsoft.mshtml.dll

Ответ 2

У меня была такая же проблема. Добавлена ​​работа c:\windows\system32\mshtml.tlb. Обратите внимание, что это не dll, а tlb. Большое вам спасибо за задание этого вопроса и благодарю вас, Ганс, за ответ:)

Ответ 3

У меня была такая же проблема, и я думаю, что происходит, по крайней мере, в моем случае, что проект был первоначально проектом VS2012 в Windows 7, и была установлена ​​первичная сборка interop, на которую ссылались. Когда я удалил и снова добавил ссылку на MSHTML и сделал diff для файлов, разница была только в том, что <WrapperTool> был изменен с primary на tlbimp и <EmbedInteropTypes> был изменен с false на true.

В какой-то момент Visual Studio добавила возможность встроить COM-оболочки непосредственно в сборку вместо ссылки на PIA, поэтому я предполагаю, что новая установка VS2015 на Windows 10 больше не устанавливает PIA, потому что они не нужны. Поэтому, почему удаление и повторное добавление ссылки устраняет проблему, и проект должен продолжать прекрасно работать и с более старой ОС.

Ответ 4

MSHTML по-прежнему остается важным компонентом в Windows 10, даже с Edge в качестве браузера по умолчанию. Вы можете найти его в "C:\Windows\System32". Чтобы указать из официального FAQ:

http://dev.modern.ie/platform/faq/will-the-webbrowser-control-work-with-mi

MSHTML:

В Windows 10 элемент управления WebBrowser будет использовать Internet Explorers унаследованный механизм рендеринга, mshtml.dll. В настоящее время EdgeHTML не доступный через элемент управления WebBrowser.

EdgeHtml

В универсальных приложениях Windows, созданных для Windows 10, элемент управления WebView используйте Microsoft EdgeHTML. Элементы управления WebView в приложениях, созданных для Windows 8 и amp; 8.1 будет продолжать загружать MSHTML для сохранения совместимости.

Ответ 5

Использование VS 2015 у меня возникла эта проблема после последнего обновления Windows 10. Я удалил ссылку "Библиотека объектов Microsoft HTML" и добавил ее снова в проект. Это разрешило проблему в моем случае.

Ответ 6

По некоторым причинам в моем случае файл Microsoft.mshtml находился в другом каталоге. В Visual Studio дважды щелкните ссылку на сборку, и вы найдете путь к ней. Теперь откройте "Командную строку разработчика для VS2017", введите следующий cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies. Затем regasm Microsoft.mshtml.dll.

Ответ 7

В случае, если все вышеперечисленное не сработало для вас, вот мое решение, которое отличается от вышеуказанного, и оно сработало для меня:

Я зарегистрировал microsoft.mshtml.dll в глобальном кэше сборок.

Вот решение:

Шаг 1: Откройте Командную строку разработчика, введя dev в поле поиска Windows 10, и щелкните правой кнопкой мыши Командную строку разработчика для VSxxxx и запустите от имени администратора

Шаг 2: Перейдите к библиотеке microsoft.mshtml.dll. В моем случае:

CD C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies>

Шаг 3 Выполните следующую команду, чтобы зарегистрироваться в глобальном кэше сборок:

gacutil -i Microsoft.mshtml.dll

Для получения дополнительной информации посетите эту веб-статью: https://docs.microsoft.com/en-us/dotnet/framework/app-domains/how-to-install-an-assembly-into-the-gac

Ответ 8

Отличное решение Арон!

В моем случае это было:

CD C:\Program Files (x86) [Enter]
CD Microsoft Visual Studio\2019 [Enter]
CD Community\Common7\IDE\PublicAssemblies [Enter]
gacutil -i Microsoft.mshtml.dll [Enter]
exit

(Я написал их в отдельных строках, так как перенос слов затрудняет чтение).