编译器错误 CS0433 - GAC 和临时 ASP.NET 文件中都存在该类型

Compiler error CS0433 - The type exists in both GAC and Temporary ASP.NET files

我遇到 运行 ASP.NET MVC4 时出现运行时错误的情况。我最近从 MVC3 迁移到 MVC4。

启动调试器后,我立即遇到此错误消息:

The type 'System.Web.Mvc.WebViewPage' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\promotionweba5681fce59023\assembly\dl3f671cff0bcf2_4619d001\System.Web.Mvc.DLL' and 'c:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Web.Mvc\v4.0_4.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll'

我 运行 在 IIS 7.5 中,使用 MVC 项目本身的解决方案设置、另一个 C# 库和一个控制台应用程序项目。

我试过了all steps mentioned in this answer, descended from a similar question。但是对我来说一点帮助都没有。

我怀疑它必须对不同的编译模型进行处理,所以我尝试了 compiling for x86 and AnyCPU,在此期间按照上述方法清理所有目录。似乎没有任何帮助。

有什么想法可能会导致 GAC 和我的临时 ASP.NET 文件之间出现这种干扰吗?

下面是一个很好的故事,但我认为它可能对其他人有所帮助。

首先,我在Visual Studio 2013 年打开了我的项目,并收到了投诉。我从 VS2013(找不到它)中跟随 link 到一个 Microsoft 站点,它解释了如何手动将 MVC3 升级到 MVC4 项目。我遵循的步骤需要手动更改 web.config.

我所做的其中一项更改是修改 System.Web.Mvc 参考的版本号。以前是 3.0.0.0,根据指南 4.0.0.0 是要更改的数字。另一个步骤是进入 NuGet 包管理器,搜索 ASP.NET MVC4 并安装它。下载的版本是 System.Web.Mvc 的 4.0.0.1,因为我认为这是编写指南时的正确版本。

完成后,我编译了项目并陷入了我发布的问题中运行时错误的永无止境的循环。我的项目是针对版本 4.0.0.1 (which seems to be the correct version number according to a windows update) 编译的。编译是正确的,但我的 web.config:

中有以下行
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

该应用程序是针对 4.0.0.1 编译的,但 运行 正在搜索 4.0.0.0 并在这两个地方找到了它:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET 
c:\Windows\Microsoft.NET\assembly\GAC_MSIL

然后是错误。我仍然觉得这部分很奇怪。

我的解决方案是修改 web.config,如前所述更改程序集参考版本,以及 System.Web.Mvc 的绑定重定向。

其他一些来源:

我曾经遇到过这个错误。我注意到项目中的引用和 web.config 中的 add assembly-tag 相同很重要。我所做的是删除对与 web.config 中不同的程序集的引用,然后添加具有正确版本的引用。我想你也可以反过来做。