Сбой развертывания ASP.NET - не удалось загрузить файл или сборку «Microsoft.mshtml» - PullRequest
1 голос
/ 22 сентября 2010

Я разработал веб-приложение в VS2008.Он отлично работает на моем ПК для разработки.Когда я публикую и загружаю в общую хостинговую службу Windows (которая поддерживает ASP.NET 3.5), происходит сбой (даже при доступе к нему с моего ПК разработчика).Сообщение об ошибке:

Не удалось загрузить файл или сборку 'Microsoft.mshtml, версия = 7.0.3300.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a' или одна из ее зависимостей.Система не может найти указанный файл.

Я прочитал много сообщений на форуме по этой теме и попробовал рекомендуемые решения:

  1. Установите ссылку на Copy Local -VS2008 не позволяет копировать Local для ссылок ASP.NET, только для ссылок WinForms.
  2. Скопировать mshtml.dll в каталог установки - я пробовал 3 разные версии файла, как в корневом каталоге, так и / bin/, под именами "mshtml.dll" и "Microsoft.mshtml.dll".Ничего не работает.
  3. Установите сборки взаимодействия из Visual Studio на сервер, запустив vs_piaredist.exe - у меня нет доступа администратора к серверу, и хостинговая компания не сделает этого.

Я знаю, что эта проблема уже была рассмотрена, но предлагаемые решения просто не работают.У кого-нибудь есть понимание?

TIA

Ответы [ 2 ]

1 голос
/ 23 сентября 2010

Если вы пытаетесь анализировать HTML, а не MSHTML, попробуйте HTMLAgilityPack или одно из других предложений, упомянутых в этом вопросе

Каков наилучший способ анализа HTML в C #?

0 голосов
/ 11 октября 2010

Опять спасибо Джейсону. HTMLAgilityPack добился цели.

Чтобы помочь другим, я опубликую несколько фрагментов кода, которые мне показались полезными (поскольку документация по продукту немногочисленна).

1) В вашем приложении ASP.NET скопируйте HtmlAgilityPack.dll и HtmlAgilityPack.XML в папку BIN.
Убедитесь, что он зарегистрирован, щелкнув правой кнопкой мыши верхнюю строку в обозревателе решений и просмотрев «Страницы свойств». Если HtmlAgilityPack отсутствует в ваших ссылках, нажмите [AddDownArrow], Добавить ссылку, Корзина, HtmlAgilityPack, OK.

2) ЗАПИСАТЬ ВЕБ-СТРАНИЦУ И ПРЕОБРАЗОВАТЬ В HTML DOC:
Адаптировано из превосходного примера асинхронной задачи EggheadCafe :

Public Function OnBegin(...)
    vRequest = WebRequest.Create("http://www.stackoverflow.com")
    Return vRequest.BeginGetResponse(cb, extraData)
End Function

Public Sub OnEnd(...)
    Private vPage_Text As String = ""
    Private vPage_Doc As New HtmlAgilityPack.HtmlDocument
    Using response As WebResponse = vRequest.EndGetResponse(ar)
        Using reader As StreamReader = New StreamReader(response.GetResponseStream())
            vPage_Text = reader.ReadToEnd()
            vPage_Doc.LoadHtml(vPage_Text)
        End Using
    End Using
End Sub

3) Извлечь весь HTML-документ:

vText = vPage_Doc.DocumentNode.OuterHtml

4) Изучите каждую ссылку в документе и соберите URL-адреса:

For Each vLinkNode As HtmlAgilityPack.HtmlNode In vPage_Doc.DocumentNode.SelectNodes(".//a")
    vLinkList = vLinkList & vLinkNode.GetAttributeValue("href", "") & vbCrLf
Next

5) ИЗУЧИТЕ ВСЕ С CSS class = "item_class" И СОБИРАЙТЕ ТЕКСТ:

For Each vDivNode As HtmlAgilityPack.HtmlNode In vPage_Doc.DocumentNode.SelectNodes(".//div[@class='item_class']")
    vPageText = vPageText & vDivNode.InnerText & vbCrLf
Next

6) Извлечь название и описание документа:

Dim vTitleNode As HtmlAgilityPack.HtmlNode = vPage_Doc.DocumentNode.SelectSingleNode(".//title")
vTitleText = vTitleNode.InnerText
Dim vDescriptionNode As HtmlAgilityPack.HtmlNode = vPage_Doc.DocumentNode.SelectSingleNode(".//meta[@name='description']")
vDescriptionText = vDescriptionNode.InnerText

Или название в теле документа:

vBodyTitle = vPage_Doc.DocumentNode.SelectSingleNode(".//h1")

7) ВЫДЕЛИТЬ ЭЛЕМЕНТ ПО ЕГО ИДЕНТИФИКАТОРУ:

Dim vBigImageNode As HtmlAgilityPack.HtmlNode = vPage_Doc.GetElementbyId("BigImage")
vImage_URL = vBigImageNode.GetAttributeValue("src", "")
vImage_Height = vBigImageNode.GetAttributeValue("height", "")
vImage_Width = vBigImageNode.GetAttributeValue("width", "")

8) УДАЛИТЬ УЗЕЛ:

vMovieNode.SelectSingleNode(".//div[@class='viewer-reviews']").Remove()

Наконец, мне нужно было извлечь подраздел страницы, когда не было явных узлов или других «точек привязки». Хитрость заключается в том, чтобы идентифицировать все, что вы можете «найти» (например, тег или комментарий), которое можно использовать в качестве точки разделения в уже выбранном узле документа. Затем вставьте теги окончания и начала вставки, создав тем самым 2 отдельных подраздела внутри узла. Наконец, создайте новый документ HTML из отредактированного узла и выберите вновь определенный узел. (Если вы не поняли всего этого, просто следуйте коду.)
Итак, вот самый секретный, никогда прежде не выпущенный,

9) ВЫДЕЛИТЬ ЛЮБУЮ ЧАСТЬ ДОКУМЕНТА:

Dim vNewDoc As New HtmlAgilityPack.HtmlDocument
vNewDoc.LoadHtml(vOldDivNode.OuterHtml.Substring(0, vOldDivNode.OuterHtml.IndexOf("<!-- comment") - 1) & _
    "</div><div class=""my_new_node"">" & _
    vOldDivNode.OuterHtml.Substring(vOldDivNode.OuterHtml.IndexOf("<!-- comment") - 1))
Dim vNewDivNode = vNewDoc.SelectSingleNode(".//div[@class='my_new_node']")
Dim vHaHaICapturedYou As String = vNewDivNode.InnerText

Конечно, теперь, когда я сказал тебе, мне придется тебя убить.

Спасибо всем авторам Stack Overflow за всю помощь, которую вы мне оказали!

...