2

我使用 VS2010 开发了一个 MVC3 网站,效果很好。我最近将我的开发环境升级到了 VS2012 RTM。我现在无法在调试器中运行网站,而不会导致开发 Web 服务器崩溃。

WebDev.WebServer40.exe 已停止工作

我在 VS2012 中看到了两个类似的堆栈跟踪之一:

首先,一个AccessViolationException

mscorlib.dll!System.StringComparer.GetHashCode(object obj) + 0xc bytes  
mscorlib.dll!System.Collections.Hashtable.GetHash(object key) + 0x10 bytes  
mscorlib.dll!System.Collections.Hashtable.InitHash(object key, int hashsize, out uint seed, out uint incr) + 0xf bytes  
mscorlib.dll!System.Collections.Hashtable.Remove(object key) + 0x38 bytes   
System.dll!System.Collections.Specialized.NameObjectCollectionBase.BaseRemove(string name) + 0x2e bytes 
System.Web.dll!System.Web.SessionState.SessionStateItemCollection.Remove(string name) + 0x56 bytes  
System.Web.dll!System.Web.SessionState.HttpSessionStateContainer.Remove(string name) + 0xc bytes    
System.Web.dll!System.Web.HttpSessionStateWrapper.Remove(string name) + 0xf bytes   
Dive7.Site.dll!Dive7.Site.D7WebViewPage<object>.IsAdmin.get() Line 56 + 0x19 bytes  C#

其次,一个NullReferenceException

mscorlib.dll!System.StringComparer.GetHashCode(object obj) + 0x33 bytes 
mscorlib.dll!System.Collections.Hashtable.GetHash(object key) + 0x10 bytes  
mscorlib.dll!System.Collections.Hashtable.InitHash(object key, int hashsize, out uint seed, out uint incr) + 0xf bytes  
mscorlib.dll!System.Collections.Hashtable.Remove(object key) + 0x38 bytes   
System.dll!System.Collections.Specialized.NameObjectCollectionBase.BaseRemove(string name) + 0x2e bytes 
System.Web.dll!System.Web.SessionState.SessionStateItemCollection.Remove(string name) + 0x56 bytes  
System.Web.dll!System.Web.SessionState.HttpSessionStateContainer.Remove(string name) + 0xc bytes    
System.Web.dll!System.Web.HttpSessionStateWrapper.Remove(string name) + 0xf bytes   
Dive7.Site.dll!Dive7.Site.D7WebViewPage<object>.IsAdmin.get() Line 56 + 0x19 bytes  C#

发生的确切事件似乎是随机的。

据我所知,我所做的只是安装 VS2012,重新启动,然后在新版本的 VS 中打开我的 VS2010 解决方案,看着它说升级成功,然后按F5

我没主意了。谁能建议可能发生的事情?

4

2 回答 2

2

请阅读链接http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253815中的“安装 ASP.NET MVC 4 破坏 ASP.NET MVC 3 RTM 应用程序”部分。按照 setps“必需的更新”,让我知道这个错误是否仍然存在。

于 2012-09-27T23:00:12.020 回答
0

正如 Anand 所指出的,当您在 VS2012 中打开 MVC3 应用程序时,您必须对它进行一些手动更改,因为安装 VS2012 也会导致安装 MVC4。这些更改允许并行操作:

Web.config

<appSettings>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

然后编辑您的 MVC 项目的.csproj文件。替换这些行:

<Reference Include="System.Web.WebPages"/> 
<Reference Include="System.Web.Helpers" />

(它们可能看起来像这样):

<Reference Include="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\..\..\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies\System.Web.WebPages.dll</HintPath>
</Reference>
<Reference Include="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
</Reference>

使用这些行:

<Reference Include="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL "/> 
<Reference Include="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

取自MVC4 发行说明

于 2012-10-01T12:30:17.450 回答