Мои изменения кода приложения ASP.NET не обрабатываются (или кешируются?)

Помощь!! У меня есть единственный файл .cs в каталоге App_Code (корневого уровня) с целью получения правильного шаблона для запрошенного URL (он связан с нашей собственной базой данных Content Management). Изначально все работало нормально - я мог вносить в него изменения, и веб-приложение их улавливало нормально. Потом что-то случилось (не знаю что), и теперь, какие бы изменения я ни делал, они не распознаются. Даже если я удалю весь каталог App_Code, это не имеет значения - я все еще, кажется, выбираю более раннюю (кешированную ??) версию того, что было в каталоге App_Code. Код в файле .cs ниже:

using System;
using Custom.CMS.Facade;
using Custom.CMS.BO;
public class CMHttpModule : IHttpModule
{
    code here...
}

Та же проблема возникает даже после того, как я скопировал веб-сайт на наш действующий сервер.

Я не понимаю, что если я ввожу преднамеренную ошибку в код .cs, я все равно получаю ошибку компиляции, и при успешной компиляции App_Code.xxxx.dll создается в C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Временные файлы ASP.NET

Итак, какую версию App_Code на самом деле использует мое веб-приложение? Как сделать так, чтобы он подобрал "правильный"?

К вашему сведению, я использую C #, Visual Web Developer Express 2008 и веб-сервер IIS 6.

Мы будем благодарны за любую помощь.


person Patrick    schedule 17.06.2011    source источник
comment
Вы пробовали решение, щелкнув правой кнопкой мыши - ›чистое решение. Восстановить?   -  person Grant Thomas    schedule 17.06.2011
comment
Спасибо, махеш. Но перезапуск IIS не имеет значения.   -  person Patrick    schedule 17.06.2011
comment
Мистер Разочарование - Visual Web Developer Express 2008 не имеет варианта чистого решения. Пытался перестроить, но продолжаю получать различные ошибки, которые ведут меня в тупик. Поскольку я вообще не использую опцию сборки на наших сайтах, я уверен, что проблема в другом?   -  person Patrick    schedule 17.06.2011
comment
Вам удалось найти решение для этого? У меня такая же проблема!   -  person David Aleu    schedule 20.09.2011
comment
@Patrick, у меня была проблема, похожая на эту, с приложениями silverlight, которые я создавал. Я обнаружил, что увеличение AssemblyFileVersion в файле AssemblyInfo.cs устранило мою проблему. Изначально это выглядело как проблема с кешированием браузера, и было действительно сложно разобраться. Возможно, это не связано с вашей проблемой, поскольку не похоже, что вы переиздаете свое приложение, но я решил, что, поскольку у вас все еще нет ответа, я бы бросил его там, как еще один дротик в мишень.   -  person Dan    schedule 24.07.2012


Ответы (6)


Повторное открытие решения также работает.

person Chris    schedule 18.04.2013
comment
Спасибо. Спасибо. Спасибо. Спасибо. Спасибо. 3 часа моей жизни ушло на то, чтобы понять, почему я не могу унаследовать класс от App_Code. Перестроил проект. Проверено на опечатки. Убедился, что я правильно наследовал и переопределял. Сделал Google Dance. Накрутил проект, перенеся аналогичный класс из App_Code. Потратил время на исправление проекта. Но все, что мне нужно было сделать, это перезагрузить проект !! ARRHRHHGH !! Спасибо, спасибо за это предложение !! - person CResults; 18.12.2013

Можете ли вы щелкнуть файл правой кнопкой мыши, перейти к свойствам и проверить действие сборки. Он должен быть установлен на «Скомпилировать».

person Jeroen    schedule 25.07.2012
comment
Я не могу этого сделать, так как это проблема только на размещенном сервере, где у меня нет доступной визуальной студии - person Sean; 26.07.2012
comment
У меня такая же проблема. Я загрузил файл .cs в папку App_Code - не думаю, что загрузка файла .cs что-нибудь даст. В IIS есть компилятор .net, но он используется только для компиляции страниц веб-форм asp.net. Можете ли вы изменить свой код локально, скомпилировать его на своем компьютере, загрузить полученный .dll и посмотреть, что он делает? - person Jeroen; 30.07.2012

Я не совсем уверен, как вы публикуете свое веб-приложение, но вы можете попробовать следующее:

  • Как упоминалось ранее, убедитесь, что вы используете ссылки на проекты вместо ссылок на файлы для библиотек DLL, которые создаются из ваших собственных проектов C #. Также убедитесь, что для вашего файла .cs в каталоге App_Code Build Action установлено значение Compile.
  • Убедитесь, что все проекты ориентированы на одну и ту же платформу .NET: v2.0, v3.5, v4.0 или v4.5. Вы можете проверить это на вкладке Application в Properties каждого проекта. Не используйте вариант профиля клиента.
  • В исходном коде удалите созданные библиотеки DLL (обычно те, которые находятся в папках bin и obj), а затем используйте Visual Studio для выполнения полной сборки. Это эквивалент Rebuild (читай: Clean, затем Build). Затем опубликуйте на своем веб-сервере.
  • Рискуя заявить очевидное, убедитесь, что в браузере, который вы используете для просмотра своего сайта, был очищен кеш, прежде чем вы попадете на сайт.

Надеюсь это поможет.

РЕДАКТИРОВАТЬ: только что возникла внезапная мысль: действительно ли это веб-приложение ASP.NET является веб-сайт? Если да, то изменения вашего кода могут не распознаваться компилятор ASP.NET, потому что« если на файл кода нет ссылки, он не компилируется ».

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

person Sameer Singh    schedule 31.07.2012
comment
убедитесь, что для вашего .cs файла в каталоге App_Code задано действие сборки Compile - вот и все. Моя по какой-то причине была установлена ​​на Контент. Спасибо. - person billpg; 06.03.2013

Вчера у меня была такая же проблема, и я исправил ее, убедившись, что ссылки на библиотеки классов в проекте веб-сайта указывают на ваши проекты библиотек классов (а не на библиотеки DLL в папке bin).

Похоже, что веб-сайт нацелен на .net 2.0, а библиотеки классов находятся в .net 3.5. Каким-то образом проект веб-сайта игнорировал перестроенные dll и использовал те, что находятся в папке bin проекта веб-сайта.

person David Aleu    schedule 21.09.2011

@SeanW -

1) Вы пытались изменить свой Web.Config вместо его полного удаления? Web.Config кэшируется, но любая его редакция должна перезапустить ваш кэш приложения.

2) Вы пробовали уничтожить свой сайт целиком и скопировать его с нуля? (Особенно не забудьте удалить и повторно скопировать все предварительно скомпилированные файлы в вашем каталоге bin.)

@ Патрик -

1) Вы пытались удалить все в каталоге временных файлов ASP.Net?

2) Если у вас были изменения в зависимых проектах в вашем решении (а не в вашем стартовом проекте), вы вручную перестраивали эти зависимые проекты по отдельности?

3) Есть ли у вас доступ для повторного использования пула приложений для вашего действующего веб-сайта в IIS?

4) Вы пытались скопировать свой действующий веб-сайт с нуля или изменить Web.Config на своем действующем веб-сайте?

Общие советы по кешированию приложений -

  • Часто можно обновить кэш приложения, внеся тривиальную ревизию в файл Web.Config.

  • Как обсуждалось в этом потоке, Global.asax изменяется , изменения каталога bin и изменения App_Code также могут вызвать обновление пула приложений.

  • В качестве долгосрочного решения вы можете захотеть управлять своим кешем приложения через файловую зависимость или Класс SQLCacheDependency. (Хотя это последнее предложение может не работать на сайтах с общим хостингом, таких как GoDaddy.)

person Mac    schedule 31.07.2012

У веб-приложения ASP.NET есть несколько ловушек. Перезагрузка проекта - это один из способов решить несколько проблем ... Действительно, довольно странно (назовите меня ошибкой)! Лично я предпочитаю веб-сайты ASP.Net (вместо приложений) с функцией JIT-компиляции. FMO, это более быстрый, легкий и простой способ поддерживать проект.

person Andreas Venieris    schedule 24.05.2014