上周在 TechEd 上了解 IntelliTrace 后,今天早上我安装了 Visual Studio 2012 Ultimate RC。我们目前使用 VS 2010 Professional,因此使用 2012 RC 是我测试 IntelliTrace 的唯一简单选择。
我打开了 VS 2012 Ultimate RC,并打开了一个用 VS 2010 编写的 MVC 3 项目。如果我将其设置为“仅 IntelliTrace 事件”,则 IntelliTrace 可以正常运行。但是,如果我将其设置为“IntelliTrace 事件和调用信息”,则启动调试器时会出现异常:
System.Reflection.TargetInvocationException was unhandled
HResult=-2146232828
Message=Exception has been thrown by the target of an invocation.
Source=mscorlib
StackTrace:
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at System.Web.HttpApplication.InvokeMethodWithAssert(MethodInfo method, Int32 paramCount, Object eventSource, EventArgs eventArgs)
at System.Web.HttpApplication.ProcessSpecialRequest(HttpContext context, MethodInfo method, Int32 paramCount, Object eventSource, EventArgs eventArgs, HttpSessionState session)
at System.Web.HttpApplicationFactory.FireApplicationOnStart(HttpContext context)
at System.Web.HttpApplicationFactory.EnsureAppStartCalled(HttpContext context)
at System.Web.HttpApplicationFactory.GetApplicationInstance(HttpContext context)
at System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
at System.Web.HttpRuntime.ProcessRequestNow(HttpWorkerRequest wr)
at System.Web.HttpRuntime.ProcessRequestNoDemand(HttpWorkerRequest wr)
at System.Web.HttpRuntime.ProcessRequest(HttpWorkerRequest wr)
at Microsoft.VisualStudio.WebHost.Request.Process()
at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn)
at Microsoft.VisualStudio.WebHost.Host.ProcessRequest(Connection conn)
at Microsoft.VisualStudio.WebHost.Server.OnSocketAccept(Object acceptedSocket)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
InnerException: System.AccessViolationException
HResult=-2147467261
Message=Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
StackTrace:
InnerException:
问题似乎出在 Microsoft.VisualStudio.WebHost.Server.OnSocketAccept 的函数入口处。我不知道这是什么。
我玩了一些,发现:
- 如果我打开在 VS 2010 中创建的 Web 表单项目,则不会出现此问题。
- 如果我在 VS 2012 RC 中创建新的 MVC 3 项目,则不会出现此问题。
- 仅当我打开在 VS 2010 中创建的 MVC 3 项目时才会出现此问题。
除了在 VS 2012 RC 中创建一个新项目并复制所有代码之外,我对如何尝试解决此问题感到困惑,我不想为我们拥有的每个项目都这样做。我不知道这可能是 VS 2012 RC 中的一个错误。我还会注意到,我还收到一条错误消息,提示“无法找到或打开 PDB 文件”,该错误与 IntelliTrace 输出中的最后一个事件一起出现,但不确定它是否已连接。任何帮助都会很棒。
最佳答案
您似乎遇到了我们最近在 Intellitrace 中修复的错误,但仅通过查看调用堆栈我无法确定。您可以尝试一下,让我知道您在“Web Development Server”上不进行调试时是否可以遇到异常吗?
要使用 IIS 服务器而不是 Web 开发服务器,请打开项目属性,选择“Web”选项卡,然后选择“使用本地 IIS Web 服务器”。 VS2010创建的项目默认选择“Web Development Server”,而VS2012创建的项目默认选择“IIS Server”。
关于asp.net-mvc-3 - 尝试在迁移的项目中使用带有调用信息的 IntelliTrace 时,Visual Studio 2012 RC 引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090331/