2010-08-25 27 views
21

Tôi đã thực sự đấu tranh cho những ngày về vấn đề này.VS 2010 lỗi gỡ lỗi: HttpException tên tệp không hợp lệ để giám sát tệp trong LoadControl

Tôi đã di chuyển dự án asp.net 3.5 trong VS2010 sang dự án asp.net 4. Mọi thứ hoạt động tốt trong vài tuần.

Bằng cách nào đó, tôi gặp lỗi lạ từ một vài ngày. Để làm rõ những gì dự án này trông giống như:

Đơn

Đó là một ứng dụng dựa trên UserControl và các lĩnh vực ứng dụng bao gồm các lồng UserControl các tầng nấc, mà nạp con cái của họ Controls trong OnInit(), để có được sự kiện này hệ thống hoạt động.

(Lưu ý: tất cả mọi thứ hoạt động tốt trong VS2008 và .net 3,5)

Các Lỗi

Bây giờ khi tôi bắt đầu gỡ lỗi các webapplication trong VS2010, thỉnh thoảng (!!!), một HttpException là được ném cùng với thông báo:

Tên tệp không hợp lệ để giám sát tệp.

trong LoadControl() < - và bây giờ nó trở nên thú vị, thông số cho LoadControl là ~/tiền tố UserControl-Path ví dụ. ~/Controls/Home/Partial.ascx NHƯNG trong ngoại lệ nó được hiển thị như là một thư mục, một nơi nào đó trong thư mục điều khiển.

Có lẽ VS sử dụng cách tiếp cận này để theo dõi nội bộ các tệp đã thay đổi để tải lại?

Có ai gặp phải vấn đề tương tự không? Nếu có, có giải pháp nào không?

Chỉnh sửa: khi triển khai ứng dụng web, lỗi sẽ biến mất. Nó chỉ xảy ra khi gỡ lỗi. Tôi hiện đã tắt HttpExceptions trong trình đơn gỡ rối-> ngoại lệ. Nhưng tôi sẽ rất vui khi bắt những người đó nữa ..

+0

Bạn đã bao giờ giải quyết vấn đề này chưa? Tôi đang chạy vào cùng một điều. –

Trả lời

27

Lỗi cuối cùng đã xảy ra một lần nữa, nhưng bây giờ tôi thấy rằng bạn có thể phá vỡ vấn đề bằng cách hoàn nguyên tùy chọn Enable Just My Code trong Tùy chọn: Tools->Options->Debugging->General, thực tế ban đầu đã được giới thiệu hành vi gỡ lỗi bị hỏng.

Tùy chọn Enable Just My Code phải được đặt.

0

Dưới đây là một giải pháp mà đòi hỏi phải sử dụng phản chiếu, đó có nghĩa là các trang web nên được chạy dưới "Full Trust"

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

T.B. Tôi gặp vấn đề này trong nhiều năm

+0

Làm thế nào để bạn tích hợp điều này vào ứng dụng của bạn? –

1

Tôi cũng gặp vấn đề này và đã có Enable Just My Code đăng ký VS. Tuy nhiên sau khi bỏ chọn tùy chọn, lưu cài đặt và sau đó kiểm tra lại, sự cố đã biến mất.

Các vấn đề liên quan