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
(Я написал их в отдельных строках, так как перенос слов затрудняет чтение).