'var_name'未声明。由于其保护级别,它可能无法访问。在调试模式下

问题描述 投票:12回答:4

此行为位于vb.net Web应用程序解决方案中,其中包含Web应用程序引用的多个类库项目。

代码编译,但在调试模式下,引用的类库中的某些函数/子例程具有显示的局部变量

'var_name'未声明。由于其保护级别,它可能无法访问。

在手表和即时窗口。

mouse_over intellisense对这些局部变量不起作用。

在某些子/函数中,变量的值是可访问的,直到我进入Try..Catch

传入Sub / Function的所有变量都是可访问的。在类级别定义的变量也是可访问的。

此行为是解决方案多年来一直存在的新代码。子例程和函数的范围没有改变(它们是公共的)。

它也不一致。在给定的类库项目中,一个类中的公共函数/子例程将具有可以看到其值的局部变量,而其他类则显示上面显示的消息。

我已经尝试过的事情:

* Clean/Rebuild Solution
* Turn off Code optimizations (it has always been turned off in Debug mode)
* Enable the "Show all members for non-user objects in variables windows (Visual Studio)" option in the Debugging options.
* Import default settings for VS2012
* Update VS2012 to latest version (Update 4)
* Install VS2013 and open solution (behavior occurs there as well)
* Clear AppData cache
* In Advanced Compiler Settings, set 'Generate debug info' to both Full and pdb-only
* Remove local copy of solution and get the solution again from TFS
* All projects in the solution are set to Debug

我在TFS中有多个解决方案,这是显示此行为的唯一解决方案。

我有一位同事在TFS中获得相同解决方案的副本,并且他的本地副本中不会发生此行为。

在VS2010中没有发生此行为。


以下是发生此行为的方法和局部变量声明的示例。如果您单步执行声明并使用局部变量设置监视任何局部变量或任何语句,您将看到

'var_name'未声明。由于其保护级别,它可能无法访问。

作为watch / quick watch / immediate windows中变量的值

Utility1.vb

Imports System.Web

Imports System.Text

Imports SPBO

Public Class Utility1

Public oNav_inc As New Navigation_INC
'===========================================================================
'Utility1.vb
'===========================================================================
    Public Sub UTIL_EstablishActivityContext(ByRef Response As HttpResponse, ByRef page As Page, ByRef oGlobal_inc As GlobalVariables_INC)

        Dim oActivity As ENC2.Web.ActivityContext
        Dim oMHardUBO As MHUBO
        Dim oPUBO As PUBO
        Dim asGroup As String = ""
        Dim sGroup As String = ""
        Dim bActive As Boolean
        Dim g_oUserAccountBO As UserAccountBO
        Dim sImplementation As String = ""
        Dim rs As DataSet
        Dim sQuery As String
        Dim rsUser As DataSet
        Dim sUserGroups As Object
        Dim iLoop As Integer
        Dim bInternal As Boolean
        Dim g_bInternalUser As Boolean

        g_bInternalUser = False

        'rest of code

    End Sub

End Class

更新:我继续重新格式化/重新映像我的笔记本电脑并安装了VS2013。这个问题不再出现了。

vb.net visual-studio-2012 visual-studio-2013 visual-studio-debugging
4个回答
4
投票

这不是一个永久的解决方案,但我确实在一个我正在为我的朋友修改的项目中找到了解决方法。虽然我不能永久地消除这个错误,但我发现如果受影响的页面实际上没有打开进行编辑,它就不会报告这些错误。

我要做的就是保存它们,将它们从编辑器中关闭,然后编译项目。一旦我完成了项目,项目就会正确编译,并且在编译之后,即使打开页面进行编辑,它也不会再次报告这些错误(尽管最终,某些编辑或其他会导致问题再次发生 - 但每一次,解决方案都是一样的。关闭所有内容,编译,然后重新打开我需要编辑的内容。)


2
投票

几个月前,我在VS2013处理完全相同的问题。这是一个疯狂的错误,微软(我最后看到)无法重现。对我来说,它没有明显的原因来来去去。前几次我通过做一些你已经尝试过的事情来摆脱它。但后来又回来了,我无法摆脱它。最后的诀窍是卸载并删除所有版本的Visual Studio的所有痕迹(包括手动扫描注册表),摆脱所有代码,项目,解决方案等,并删除所有版本的.NET。

然后我把.NET重新安装,重新安装VS2013,并从TFS获得最新版本。从那以后,它还没有回来。当然希望它没有。祝好运!


1
投票

尝试CleanSolution,它似乎为我修复它。


0
投票

当谈到用VB.NET编写的WinsForm应用程序时,如果“{Whatever_Form} .vb [Design]”选项卡,{Whatever_Form} .designer.vb代码文件的后备代码文件被Visual损坏,就会发生这种情况。 Studio设计师逻辑。在{Whatever_Form} .designer.vb代码文件“Me”中,在Sub InitializeComponent()内的错误范围内声明了“...未声明。它可能无法访问...”的控制符号。前缀丢失,“Friend WithEvents Foo As Type”语句缺失和/或以上全部。修复它的方法是直接编辑{Whatever_Form} .designer.vb代码文件,保持正确的{Whatever_Form} .vb源不变。编辑所有与{Whatever_Form} .designer.vb代码文件的符号有关的不一致声明,该文件使用“在文件中查找”Visual Studio菜单项列出。

避免不导致此类损坏的一件事是不使用Visual Studio Properties选项卡重命名控件符号的属性名称“(Name)”或事件处理程序过程名称。仅重命名{Whatever_Form} .vb源文件中的符号。

我使用Visual Studio 2017 Pro,用于面向.NET Framework 4.7.1的VB.NET WinsForm应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.