VS 2010 не проходит отладку: HttpException неверное имя файла для мониторинга файлов в LoadControl - PullRequest
21 голосов
/ 25 августа 2010

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

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

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

Приложение

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

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

Ошибка

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

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

in LoadControl() <- и теперь это становится интересным, параметр для LoadControl - это ~ / prefixed UserControl-Path, например.~ / Controls / Home / Partial.ascx НО в Исключении он отображается как каталог, где-то в каталоге элементов управления. </p>

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

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

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

Ответы [ 3 ]

28 голосов
/ 12 сентября 2012

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

Опция Enable Just My Code должна быть установлена.

1 голос
/ 26 августа 2014

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

0 голосов
/ 12 марта 2013

Вот решение, которое требует использования рефлексии, это означает, что веб-сайт должен работать под «Полным доверием»

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
        }
    }
}

PS У меня была эта проблема много лет

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