Подтвердить что ты не робот

Как исправить ошибку ASP.NET "Файл nnn.aspx" не был предварительно скомпилирован и не может быть запрошен ".?

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

Иными словами, весь сайт предварительно скомпилирован. Однако, когда я перехожу к любому .aspx файлу в определенной подпапке под названием "Сервисы", я получаю 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 filename и важно ли это?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Для этого вам нужно использовать инструмент с именем "Assembly Binding Log Viewer". Этот инструмент скажет вам, какие ссылки отсутствуют или имеют неправильные версии. Если есть недостающая/несогласованная ссылка, тогда идите и исправьте ее; в противном случае вам понадобятся другие волшебные трюки, например, проверка наличия пула приложений на 32-битных или разрешенных.

Шаги:

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

    C:\fuslog C:\fuslog\Logs

  • Скопировать привязку журнала привязки к серверу на C:\fuslog:

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

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

    Вам может потребоваться "Программные файлы" вместо "Program Files (x86)"  или посмотрите на разные версии вместо "v7.0A"

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

  • Нажмите "Настройка..."

  • Убедитесь, что отмечен "Логарифмический сбой на диске"

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

  • Нажмите OK

  • Перезагрузите/reset ваш пул приложений, чтобы обеспечить новое связывание

  • Нажмите "Обновить". Теперь вы можете увидеть неудавшееся связывание здесь

  • Лучший способ найти точную привязку - перейти в 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

Эта ошибка возникла у меня, и я решил ее.

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Remove additional files at destination

Ответ 10

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

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root 

Ответ 11

Повторное использование одних и тех же файлов также устраняет эту проблему в моем случае.

Так что, возможно, перед тем, как попробовать что-нибудь еще, сначала попробуйте снова установить приложение (содержимое папки в папке должно быть достаточно)

BTW: В моем случае ошибка началась, когда диск C закончил свободное пространство.

Счастливое кодирование! ChiTec

Ответ 12

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

это произошло из-за необычного развертывания и смешивания файлов bin с новыми опубликованными в нашей среде VPS.

Решение:

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

enter image description here

Ответ 13

Начните с проверки свободного места на диске. Я получил эту ошибку, когда у нас закончилось свободное место на жестком диске, на котором размещен IIS.

Ответ 14

Для меня у меня был script, который удаляет производственную папку, а затем копирует новые файлы.

script не удалось удалить производственную папку, оставив при этом старое и новое файлы вместе с ошибкой.

Я вручную удалил всю папку и снова развернул ее... затем обновил script.

Ответ 15

i столкнулся с этой проблемой, когда я применил некоторые изменения к существующему сайту.

Чтобы избавиться от проблемы, я удалил все файлы из папки bin и перераспределил их.

Затем проблема решена.

Надеюсь, это может помочь кому-то.

Ответ 16

Если вы получаете эту ошибку при запуске MSBuild script, скорее всего, ваш проект представляет собой проект 2.0 или 3.5, а MSBuild использует компилятор 4.0. Попробуйте добавить TargetFrameworkMoniker = "3.5" в ваши директивы AspNetCompiler.

Ответ 17

В моем случае я не загружал общие DLL, такие как AjaxControlToolkit.dll, Telerik.dll и т.д. Я загрузил всю опубликованную папку и исправил ее для меня.

Ответ 18

В случае обновления и последующей перекомпиляции. скопируйте все файлы из папки bin снова, а также конкретный файл, обновленный из соответствующей папки.

Ответ 19

В моем случае ошибки для просмотра asp.net mvc razor (.cshtml), папка /bin содержала два файла .compiled для одного и того же представления. Один из них был старым и его нужно было удалить.

У меня также было второе представление в подпапке views views, которое также нужно было удалить.

Причиной проблемы является то, что я переместил представление из подпапки представлений контроллера в общую папку, однако мой процесс развертывания (Visual Studio Publish) не удалял устаревшие файлы view и view.compiled с сервера. Вы можете указать Visual Studio всегда очищать папку назначения, но это замедлит процесс развертывания.

Ответ 20

Наконец, я нашел проблему. Если вы используете среду MVC, например, меня, обновите свою версию MVC. В моем случае я изменил MVC 4.0.0.0 на 4.0.0.1 и проверил все ссылки на проект "Локальная копия" на "Истина". После этого моя проблема решена. Проверьте версию MVC во всех файлах конфигурации (4.0.0.0- > 4.0.0.1)

И следить за сообщениями предупреждения компилятора asp.

Ответ 21

У меня была такая же проблема, когда я начал использовать VWD Express 2012 (после того, как я использовал Express 2010, который работал хорошо) Пошел на мои панели управления хостингом и изменил версию ASP.NET от 2.0-Classic до 4.0 Classic, как показано. Проблема ушла.

XzmWi.jpg

Ответ 22

Эта ошибка также может возникать, если у вас есть файл .compiled в bin для страницы, которая больше не является частью вашего проекта. Вы получаете это вместо 404 по существу. Удалите файл .compiled, а затем вы получите 404.

Ответ 23

В моем случае файл "nnn.aspx.xxxxxxxx.compiled" был удален WebDeploy, потому что я запускал 2 одновременных задания в том же рабочем пространстве Jenkins. Второе задание удалило некоторые файлы во время создания пакета WebDeploy.

Ответ 24

Это решение для VS 2008.

Пожалуйста, установите флажок, как показано ниже, чтобы решить эту проблему.

enter image description here