设置:
我正在开发的 MVC 3 应用程序突然无法编译。我收到以下错误:
“System.Web.UI.Control”类型在未引用的程序集中定义。您必须添加对程序集“System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”的引用。
这显然是荒谬的:我的机器上有 System.Web 版本 4.0.0.0。
如果我删除相关行的代码,错误只会移至下一行。
Visual Studio 一直在提示加载项,例如,如果我尝试转到定义,VS 会提示并询问我是否要删除加载项。
问题:
VS 被破坏了吗?
我是否需要重新安装所有重要的东西(VS 2010、电动工具、MVC 3 以及其他什么)?
编辑:
由于找到了原因并因此解决了问题,我已将问题重命名为更容易被其他有相同或相似问题的人找到的名称。
尽我所能,我的回答说明了如何解决此问题。但如果有人能对这个问题提出完整的解释,那么我很乐意将其标记为答案。
最佳答案
好的,我已经弄清楚了。
问题是我使用了一些字符串扩展。这些被打包在图书馆里,很久以前写的。
问题是由命名空间引起的。让我们称之为 WS.Extensions
在 WS.Extensions 中,我还有一些用于普通 vanilla asp.net 服务器控件的扩展方法,这些扩展所在的类具有用于 System.Web.UI 的 using 语句。
虽然库项目中引用了相关的 dll,但这似乎会导致 MVC 3 出现问题,而且在我看来,这是一个模糊的错误。一旦您知道问题出在哪里就很明显,否则就不会。
我已将所有扩展移至新库,没有交叉使用引用服务器控件命名空间(例如 System.Web.UI)的语句。
我没有删除我的帖子,因为我认为这个问题可能发生在其他人从服务器控件的恐怖转向 MVC 的过程中。
附录:
这个错误令人讨厌的地方在于它显示为编译器错误,并在“问题”所在的特定行。注释掉这一行只会将编译器提示的那一行移到下一行。此外,该行与使用扩展名的行绝对无关。所以没有任何线索。
因此,我认为这是一个编译器错误,与 ASP.NET MVC、3 或其他无关。
这是由引用(使用)来自 ASP.NET MVC 3 应用的命名空间引起的,当该命名空间包含为 ASP.NET 服务器控件编写的代码时。
我在这个问题上浪费了半天时间,所以希望这对其他人有帮助。结果,重命名了问题。
关于asp.net-mvc - MVC 3 要求 System.Web 版本 2.0.0.0 (System.Web.UI.Controls) : Is this a compiler bug?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6571796/