Как исправить ошибку ASP.NET «Файл nnn.aspx не был предварительно скомпилирован и не может быть запрошен.»? - PullRequest
40 голосов
/ 02 марта 2009

У меня есть веб-сайт VS 2005, который я публикую с помощью «Публикация веб-сайта», и я снимаю все три флажка. У меня также есть проект развертывания, который выбирает опубликованные файлы и создает MSI. Затем я устанавливаю пакет на отдельном тестовом сервере.

Другими словами, весь сайт предварительно скомпилирован. Однако при переходе к любому файлу .aspx в определенной подпапке с именем «Services» я получаю HttpException:

System.Web.HttpException: файл '/myapp/Services/mypage.aspx' не был предварительно скомпилирован и не может быть запрошен.

Если я перехожу к файлу .aspx в другой папке, будь то корневая папка или другая подпапка, она работает правильно.

Содержимое самого mypage.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="mypage.aspx.cs" Inherits="Services_mypage" %>"

В папке /myapp/bin я вижу файл mypage.aspx.989dc2fb.compiled. Кажется, что содержание этого указывает на определенную сборку, которая также присутствует в папке bin.

Почему происходит эта ошибка? Файл .compiled находится там, и там есть сборка, и рассматриваемый тип присутствует в этой сборке (я вижу это в Обозревателе объектов). Это связано с именем или содержимым .compiled-файла? У меня как-то не та версия? Что означает, казалось бы, случайное число в имени файла .compiled и важно ли это?

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

Ответы [ 24 ]

22 голосов
/ 02 марта 2009

У меня не было этой ошибки, но после небольшого поиска в Google я наткнулся на эту ссылку, я не уверен, что вы ее уже видели: http://forums.asp.net/t/956297.aspx

Редактировать (добавить текст ключа):

Эта ошибка возникает, когда в файле web.config указана ссылка, а папка / сайт развертывания не содержит этих dll, установленных в системе, или папка bin не содержит их (если они являются частными сборками). Например: (добавить сборку = "Namespace1.NameSpace2, версия = x.x.x.x, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35" /) если ваш web.config содержит какие-либо сборки, подобные этой, и развернутый сервер не содержит этих сборок в bin или GAC, то произойдет эта ошибка.

Люди сообщали, что отсутствующие сборки на конечном сервере в конечном итоге являлись основной причиной, но у них была та же ошибка, что и у вас. Weird.

Может быть, в этом проблема?

19 голосов
/ 20 сентября 2012

Я получил эту ошибку при обновлении сайта с 2.0 до 4.0. Ошибка была вызвана файлом PrecompiledApp.config в каталоге сайта root. Когда я удалил этот файл, сайт начал работать.

19 голосов
/ 03 июля 2011

Так же, как сноска на все приведенные выше ответы, которые решили проблему путем повторной публикации для замены отсутствующей сборки ... Хотя ранее я решал эту проблему с помощью того же решения, я только что столкнулся с другой причиной ее возникновения, которая может помогать другим.

В AppPool, на котором работал мой сайт, для параметра «Включить 32-разрядные приложения» установлено значение false. Изменив это значение на true в диалоговом окне «Дополнительные параметры» пула приложений, я решил мою проблему.

Надеюсь, это поможет другому бедному сосунку.

8 голосов
/ 05 декабря 2014

Я пытался решить эту проблему в течение последних нескольких дней. По крайней мере, в моем случае сообщение об ошибке полностью вводило в заблуждение и не имело ничего общего с предварительно скомпилированным сайтом. Есть много статей или постов, которые дают много разных ответов, которые только добавляют путаницы. Я лично считаю, что эта ошибка вызвана главным образом из-за отсутствия ссылок или неправильного управления версиями. Чтобы решить проблему как можно быстрее, вы должны исключить это или иным образом исправить отсутствующую / неправильную ссылку.

Для этого вам понадобится инструмент под названием «Просмотр журнала привязки сборки». Этот инструмент скажет вам, какие ссылки отсутствуют или имеют неправильные версии. Если есть отсутствующая / несоответствующая ссылка, тогда исправьте ее; в противном случае вам нужно выполнить другие фокусы, такие как проверка того, является ли пул приложений 32-разрядным или разрешения.

Шаги:

  1. На вашем сервере создайте следующие папки

    C: \ fuslog C: \ fuslog \ журналы

  2. Скопируйте средство просмотра журнала привязки сборки на сервер по адресу C: \ fuslog:

    Вы можете найти программу в таком месте, как это

    C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ fuslogvw.exe

    Возможно, вам придется посмотреть «Program Files» вместо «Program Files (x86)» или посмотрите на разные версии вместо "v7.0A"

  3. Выполнить fuslogvw.exe на сервере

  4. Нажмите «Настройка ...»

  5. Убедитесь, что установлен флажок «Ошибка привязки журнала к диску»

  6. Установите флажок Включить пользовательский путь к журналу и введите в поле следующее: C: \ fuslog \ logs

  7. Нажмите ОК

  8. Перезапуск / сброс пула приложений для принудительного применения новой привязки

  9. Нажмите Обновить. Теперь вы можете увидеть сбойную привязку здесь

  10. Лучший способ найти точную привязку - перейти в c: \ fuslog \ logs \ Default. Здесь вы можете найти точные ошибки связывания. Некоторые из них не имеют значения, и вам нужно найти критический методом проб и ошибок. У меня произошла следующая ошибка:

     System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35
    

Я исправил проблему, добавив следующую запись на моих веб-сайтах web.config:

<configuration>
    ...
    <runtime>
        ...
        <!-- Added this entry to fix the issue -->
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.0" />
        </dependentAssembly>
        ...
    </runtime>
    ...
</configuration>

Надеюсь, это поможет другим быстро решить проблему.

5 голосов
/ 24 марта 2013

Эта ошибка произошла со мной, и я решил ее.

Если вы хотите опубликовать свой сайт, отметьте использование фиксированных имен и сборок на одной странице в Visual Studio

Вы увидите, что эта проблема будет решена!

3 голосов
/ 27 июня 2017

Я столкнулся с той же проблемой. Моя проблема была исправлена ​​путем удаления файлов из папки временных файлов asp.net в этой папке:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root 
3 голосов
/ 29 августа 2013

Мы исправили это, перезапустив AppPool, попробовав несколько других решений. В этом случае переиздание не было возможным.

3 голосов
/ 02 марта 2009

Оказалось, что в MSI отсутствовала (не веб-библиотека) DLL, которая, как я полагаю, использовалась страницами, сообщающими об ошибке. Я бы сказал, что это довольно вводящее в заблуждение сообщение об ошибке, поскольку страница, безусловно, была предварительно скомпилирована, но в ней отсутствовала ссылка на эту DLL.

2 голосов
/ 03 июля 2015

Этот вариант решил проблему для меня. По сути, он удаляет все потерянные файлы, оставшиеся после предыдущего развертывания.

Remove additional files at destination

2 голосов
/ 01 декабря 2009

У меня была такая же проблема сегодня. Некоторые форумы говорят о том, что на вашем сайте отсутствуют ссылки, и это, безусловно, так и есть в вашем случае. Несмотря на то, что у вас есть все необходимые сборки, возможно, вы развертываете свой веб-сайт на сервере IIS с платформой 3.5, верно?

Ну, это был мой случай, поэтому я скопировал файл web.config с исходного веб-сайта ASPX 3.5 и изменил некоторые детали (удалил другие ссылки на сборки 3.5) и попытался развернуть его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...