web-dev-qa-db-ja.com

'var_name'は宣言されていません。保護レベルが原因でアクセスできない可能性があります。」デバッグモード

この動作は、Webアプリによって参照される複数のクラスライブラリプロジェクトを持つvb.net Webアプリケーションソリューションで発生します。

コードはコンパイルされますが、デバッグモードでは、参照されるクラスライブラリの一部の関数/サブルーチンに、表示するローカル変数があります

'var_name'は宣言されていません。保護レベルが原因でアクセスできない可能性があります。

時計と即時ウィンドウで。

Mouse_over intellisenseは、これらのローカル変数では機能しません。

一部のサブ/関数では、Try..Catchに入るまで変数の値にアクセスできます

Sub/Functionに渡されたすべての変数にアクセスできます。クラスレベルで定義された変数にもアクセスできます。

この振る舞いは、何年も前からソリューションに存在していたコードの新機能です。サブルーチンと関数のスコープは変更されていません(これらはパブリックです)。

それも一貫していません。特定のクラスライブラリプロジェクトでは、1つのクラスのパブリック関数/サブルーチンには、その値を確認できるローカル変数があり、他のクラスには上記のメッセージが表示されます。

私がすでに試したこと:

* 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'は宣言されていません。保護レベルが原因でアクセスできない可能性があります。

ウォッチ/クイックウォッチ/イミディエイトウィンドウの変数の値として

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をインストールしました。問題はもう発生していません。

12
user3337755

それは完全に恒久的な解決策ではありませんが、私の友人のために修正しているプロジェクトでこれの回避策を見つけました。バグを恒久的に解消することはできませんでしたが、影響を受けるページが実際に編集用に開かれていない場合、これらのエラーは報告されていません。

私がしなければならなかったことは、それらを保存し、エディターから閉じて、プロジェクトをコンパイルすることでした。私がそれを実行すると、プロジェクトは正しくコンパイルされ、コンパイルした後、ページが編集のために開かれた後でも、それらのエラーは再度報告されません(ただし、最終的に、編集またはその他によって問題が再発する可能性があります-しかし、毎回、解決策は同じでした。すべてを閉じてコンパイルし、編集する必要があるものをすべて再度開きます。)

4
Rob Wilkins

数か月前、VS2013でまったく同じ問題を扱っていました。 Microsoftが(最後に確認した)再現できないのは、厄介なバグです。私にとって、それは明確な理由もなく行き来しました。最初の数回は、すでに上で試したことのいくつかを実行することによって、それを取り除きました。しかし、それは戻ってきて、私はそれを取り除くことができませんでした。最後にトリックを行ったのは、Visual Studioのすべてのバージョンのすべてのトレース(レジストリの手動スイープを含む)をアンインストールして削除し、すべてのコード、プロジェクト、ソリューションなどを削除し、.NETのすべてのバージョンを削除することでした。

次に、.NETを元に戻し、VS2013を再インストールし、TFSから最新の情報を取得しました。それ以来、それは戻ってきていません。確かにそうなっていないことを願っています。幸運を!

2
Casey Crookston

CleanSolutionを試してみてください、それは私のためにそれを修正するように見えました。

1

VB.NETで記述されたWinsFormアプリに関しては、「{Whatever_Form} .vb [Design]」タブのバッキングコードファイル、{Whatever_Form} .designer.vbコードファイルがVisualによって破損している場合に発生する可能性がありますスタジオデザイナーのロジック。 「...宣言されていません。アクセスできない可能性があります...」であると思われるコントロールシンボルが、{Whatever_Form} .designer.vbコードファイル内のSub InitializeComponent()内の誤ったスコープで宣言されています。接頭辞が欠落している、「Friend WithEvents Foo As Type」ステートメントが欠落している、および/または上記のすべてが欠落している。これを修正する方法は、{Whatever_Form} .designer.vbコードファイルを直接編集して、正しい{Whatever_Form} .vbソースを変更せずに残すことです。 「ファイルから検索」のVisual Studioメニュー項目を使用してリストされている{Whatever_Form} .designer.vbコードファイルのシンボルに関連するすべての矛盾する宣言を編集します。

この種の破損を引き起こさないようにするための1つのことは、Visual Studioの[プロパティ]タブを使用して、コントロールシンボルのプロパティ名「(名前)」またはイベントハンドラープロシージャ名を変更しないことです。 {Whatever_Form} .vbソースファイルからのみシンボルの名前を変更します。

.NET Framework 4.7.1をターゲットとするVB.NET WinsFormアプリにVisual Studio 2017 Proを使用しています。

0
BoiseBaked