2010-08-25 20 views
21

我真的一直在這個問題上奮鬥了幾天。VS 2010調試失敗:LoadControl中的文件監控HttpException無效的文件名

我已經將VS2010中的asp.net 3.5項目遷移到了asp.net 4項目。一切工作都很好,好幾個星期。

不知何故,幾天後我收到一個奇怪的錯誤。要弄清這個項目的樣子:

的應用

這是一個用戶控件基於應用程序和應用程序區,以獲取事件組成的嵌套的用戶控件層次結構,即加載自己的孩子控件OnInit()的系統工作。

(注:一切都在VS2008的偉大工程和.NET 3.5)

的錯誤

現在,當我開始調試在VS2010的web應用,有時(!!!),一個HttpException是拋出,並帶有以下消息:

文件監視的文件名無效。

in LoadControl() < - 現在有趣的是,LoadControl的參數是〜/前綴UserControl-Path例如。 〜/ Controls/Home/Partial.ascx但是在例外情況下,它顯示爲一個目錄,在控制目錄的某處。

也許VS使用這種方法來內部跟蹤已更改的文件以重新加載?

有沒有人遇到同樣的問題?如果是這樣,有沒有解決辦法?

編輯:部署Web應用程序時,錯誤消失。它只在調試時發生。我目前在debug-> exceptions菜單中禁用HttpExceptions。但是,我會很高興再次趕上那些太..

+0

你有沒有解決這個問題?我遇到了同樣的事情。 – 2010-10-06 15:58:24

回答

27

錯誤最終再次發生,但現在我發現,您可以通過恢復的選項Enable Just My Code選項規避問題:Tools->Options->Debugging->General,這其實原本推出破壞的調試行爲。

必須設置選項Enable Just My Code

0

下面是需要反思的功能的解決方案,這意味着該網站應該在「完全信任」

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

附:運行我有這個問題很多年

+0

你如何將它整合到你的應用程序中? – 2015-09-28 16:10:29

1

我也有這個問題,並且已經在0123中檢查了Enable Just My Code。然而,取消選中該選項後,保存設置,然後重新檢查它,問題就消失了。