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

VS 2010 не удается отладить: HttpException недопустимое имя файла для контроля файлов в LoadControl

Я действительно много дней боролся с этим вопросом.

Я перенес проект asp.net 3.5 в VS2010 в проект asp.net 4. Все работало нормально в течение нескольких недель.

Как-то, я получаю странную ошибку с нескольких дней. Чтобы прояснить, как выглядит этот проект:

Приложение

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

(Примечание: все отлично работает в VS2008 и .net 3.5!)

Ошибка

Теперь, когда я начинаю отладку web-приложения в VS2010, иногда (!!!), вызывается HttpException, с сообщением:

Недопустимое имя файла для мониторинга файлов.

in LoadControl() < - и теперь он становится интересным, параметр LoadControl является ~/префиксом UserControl-Path, например. ~/Элементы управления/Главная/Partial.ascx, но в Exception он отображается как каталог, где-то в каталоге управления.

Вероятно, VS использует такой подход для внутренней отслеживания измененных файлов для перезагрузки?

Кто-нибудь сталкивался с той же проблемой? Если да, были ли какие-либо решения?

Изменить: при развертывании веб-приложения ошибка исчезает. Это происходит только при отладке. В настоящее время я отключил HttpExceptions в меню debug- > exceptions. Но я был бы очень рад снова их поймать.

4b9b3361

Ответ 1

Ошибка в конечном итоге произошла снова, но теперь я обнаружил, что вы можете обойти проблему, возвращая опцию Enable Just My Code в Options: Tools->Options->Debugging->General, которая на самом деле первоначально ввела нарушение режима отладки.

Параметр Enable Just My Code должен быть установлен.

Ответ 2

У меня тоже была эта проблема, и я уже проверил Enable Just My Code в VS. Однако после снятия отметки с опции, сохранения настроек, а затем повторной проверки, проблема исчезла.

Ответ 3

Здесь решение, которое требует использования рефлексии, означает, что веб-сайт должен работать под "Полный доверие"

using System;
using System.Reflection;

namespace Composite
{
    internal static class BuildManagerHelper
    {
        /// <summary>
        /// Gets a user control. Prevents an exception that appears in Visual Studio while debugging
        /// </summary>
        /// <param name="virtualPath"></param>
        /// <returns></returns>
        public static Type GetCompiledType(string virtualPath)
        {
            try
            {
                DisableUrlMetadataCaching(true);

                return System.Web.Compilation.BuildManager.GetCompiledType(virtualPath);
            }
            finally
            {
                DisableUrlMetadataCaching(false);
            }
        }

        /// <summary>
        /// Disabling the "url metadata caching" prevents <see cref="System.Web.HttpException" /> in debugger 
        /// </summary>
        /// <param name="disableCaching"></param>
        public static void DisableUrlMetadataCaching(bool disableCaching)
        {
            #if DEBUG

            var systemWeb = typeof (System.Web.TraceMode).Assembly;
            Type cachedPathData = systemWeb.GetType("System.Web.CachedPathData", false);
            if (cachedPathData == null) return;

            FieldInfo field = cachedPathData.GetField("s_doNotCacheUrlMetadata", BindingFlags.Static | BindingFlags.NonPublic);
            if (field == null) return;

            field.SetValue(null, disableCaching);

            #endif
        }
    }
}

P.S. У меня была эта проблема в течение многих лет.