'var_name'is not declared. It may be inacc

2019-01-26 05:54发布

This behavior is in a vb.net web application solution with multiple class library projects referenced by the web app.

The code compiles, but in debug mode, some functions/subroutines in the referenced class libraries have local variables that display

'var_name' is not declared. It may be inaccessible due to its protection level.

in the watch and immediate windows.

The mouse_over intellisense doesn't work on those local variables.

In some sub/functions the variables' values are accessible until I step into a Try..Catch

All variables passed into the Sub/Function are accessible. Variables defined at the class level are accessible, too.

This behavior is new in code that has been in the solution for years. The scope of the subroutines and functions have not changed (they are Public).

It is not consistent either. In a given class library project, public functions/subroutines in one class will have local variables where you can see their values, while others display the message shown above.

Things I have already tried:

* 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

I have multiple solutions in TFS and this is the only solution that shows this behavior.

I have had a colleague get a copy of the same solution in TFS and the behavior does NOT occur in his local copy.

This behavior did not occur in VS2010.


Here is an example of a method and local variable declarations where this behavior occurs. If you step through the declarations and set watch on any of the local variables or any statements using the local variables, you will see

'var_name' is not declared. It may be inaccessible due to its protection level.

as the value of the variable in the 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

UPDATE: I went ahead and reformatted/reimaged my laptop and installed VS2013. The issue is no longer appearing.

4条回答
Summer. ? 凉城
2楼-- · 2019-01-26 06:05

It's not exactly a permanent solution, but I did find a workaround for this in a project I was amending for a friend of mine. Although I couldn't make the bug to go away on a permanent basis, I found that it didn't report these errors if the affected pages weren't actually open for editing.

What I had to do was save them, close them out of the editor, and then compile the project. The project WOULD compile correctly once I'd done that, and after it had compiled, it wouldn't report those errors again even once the pages were opened for editing (though eventually, some edit or other would cause the problem to reoccur -- but each time, the solution was the same. Close everything out, compile, and then reopen whatever I need to edit.)

查看更多
ら.Afraid
3楼-- · 2019-01-26 06:05

When it comes to a WinsForm app written in VB.NET, this can happen if the backing code file for the "{Whatever_Form}.vb [Design]" tab, {Whatever_Form}.designer.vb code file, is corrupted by the Visual Studio designer logic. The control symbol that is supposedly "...not declared. It may be inaccessible..." is declared at the wrong scope within Sub InitializeComponent() within the {Whatever_Form}.designer.vb code file, the "Me." prefix is missing, "Friend WithEvents Foo As Type" statement is missing and/or all of the above. The way to fix it is to directly edit the {Whatever_Form}.designer.vb code file leaving the correct {Whatever_Form}.vb source untouched. Edit all the inconsistent declarations having to do with the symbol of the {Whatever_Form}.designer.vb code file which is listed out using the "Find in Files" Visual Studio menu item.

One thing to avoid to not cause this type of corruption is to not rename the control symbol's property names "(Name)" or event handler procedure names using the Visual Studio Properties tab. Rename symbols from the {Whatever_Form}.vb source file only.

I using Visual Studio 2017 Pro, for a VB.NET WinsForm app targeting .NET Framework 4.7.1.

查看更多
Viruses.
4楼-- · 2019-01-26 06:11

Try to CleanSolution, it appeared to fix it for me.

查看更多
SAY GOODBYE
5楼-- · 2019-01-26 06:17

A few months back I was dealing with exact same issue in VS2013. It is a maddening bug that Microsoft is (last I saw) unable to reproduce. For me, it came and went with no apparent reason. The first few times I got rid of it by doing some of the things you have already tried above. But then it came back and I could not get rid of it. What finally did the trick was uninstalling and removing all traces of all versions of Visual Studio (including a manual sweep of the registry), getting rid of all code, projects, solutions, etc, and removing all versions of .NET.

Then I put .NET back, re-installed VS2013, and got latest from TFS. Since then, it has not come back. Sure hope it doesn't. Good luck!

查看更多
登录 后发表回答