【发布时间】:2019-12-08 23:17:45
【问题描述】:
我有一个巨大的企业 asp.net 应用程序,可以完美地在服务器上构建和运行。我们一直在工作流程中使用 Visual Studio 2013。现在我们要迁移到更新的 IDE。但如果我在 Visual Studio 2017 中构建此应用程序,我会收到此错误。
错误 BC40004 sub 'PreInit' 与基类 'Page' 中的事件 'PreInit' 冲突,应声明为 'Shadows'。
我认为这是VB编译器版本的问题(再次vs2013构建项目)。你知道如何解决这个问题吗?
我的解决方案包含 40 多个项目。主要项目是用 VB.net 编写的 asp.net webforms 应用程序。其他项目是用 C# 编写的服务和代码库。
我尝试在 .vdproj 中手动指定 VB.net 版本。但这并没有解决我的问题。
编辑:很好。谢谢大家的回复。我得到的问题是关于代码的,而 Visual Studio 分析器在过去几年中发生了很大变化。我会试着找出这段代码无异常运行的原因。
【问题讨论】:
-
如果省略
Shadows关键字,则该成员将被视为无论如何都存在,因此编译的应用程序的运行方式没有区别。始终在派生类中声明一个与基类中的成员同名的成员是一个好习惯,Overrides或Shadows这样任何阅读代码的人都清楚,这不是一个错误成员有相同的名字。 -
也就是说,在一个类中拥有一个名为
PreInit的Sub可能不是很好,该类继承了另一个具有名为PreInit的事件的类。您通常只会隐藏同类型的成员,例如一个Sub覆盖一个Sub或一个Property覆盖一个Property。跟踪事件甚至没有多大意义。 -
当您有冲突时,包括完整的命名空间将解决冲突。就像使用 System.Net.TcpClient 而不是只使用 TcpClient。
-
我认为这无关紧要的原因是,当你隐藏一个成员时,它是通过基类型的引用调用的基成员,而派生成员是通过派生类型的引用调用。当
PreInit事件被引发时,它可能是通过Page类型的引用,因此只有该事件可见,因此您的PreInit方法在该上下文中无效。
标签: asp.net vb.net visual-studio webforms