【问题标题】:variable is not declared it may be inaccessible due to its protection level变量未声明它可能由于其保护级别而无法访问
【发布时间】:2015-01-30 02:11:34
【问题描述】:

我的VB技术不是最好的,这个问题困扰了我好几天。

在 Visual Studio 中显示的未在后面的代码中定义的控件列表中,我可以“将鼠标悬停”它们并且工具提示文本会立即弹出。

类似问题:

这个没有解决办法 - 'var_name'is not declared. It may be inaccessible due to its protection level.' in debug mode

这个人说解决方案在 web.config 中,但我不明白在哪里/如何 - BC30451: 'MailValidation' is not declared. It may be inaccessible due to its protection level

这是一个拼错的词 - vb.net error: inaccessible due to its protection level

更新 - 这是另一个问题,可能是我的问题的线索:

在我的 Tools.vb 模块中,我有一个访问 LDAP 的类。

login.aspx.vb 代码中给出了工具类的命名空间,但登录代码无法识别工具类。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • 由于您已达到最大错误数,很可能该列表中的其他内容是导致所有其他错误的原因。仔细查看该列表的底部,以了解其他类型的错误。
  • 你是Clean Solution,然后是Rebuild Solution
  • 还始终为您的解决方案提供备份,并通过稳定的更新保存更改,并经常保存。
  • @OneFineDay - 我每次都做一个干净的构建。

标签: asp.net vb.net visual-studio-2010


【解决方案1】:

密切注意错误的第一部分:“变量未声明”

忽略第二部分:“由于其保护级别,它可能无法访问”。这是一条红鲱鱼。

一些问题...(答案可能在您发布的那张图片中,但我似乎无法将其放大,而且我的眼睛也看不到那么小的字体...您可以发布代码在某种程度上这些年长的眼睛可以阅读它?很难了解整体情况。尤其是我对您的 Page 指令持怀疑态度。)

我们知道 1stReasonTypes 是一个列表框,但由于某种原因,我们似乎不知道哪个列表框。这就是我想查看您的页面指令的原因。

另外,你是如何调用私有方法 FormRefresh() 的?它不是事件处理程序,这让我想知道您是否试图以在后面的代码中未正确处理的表单引用列表框。

您可能需要找到控件 1stReasonTypes。试着把你的列表框放在像

这样的东西里面
<div id="MyFormDiv" runat="server">.....</div>

然后在 FormRefresh() 中,执行...

Dim 1stReasonTypesNew As listbox = MyFormDiv.FindControl("1stReasonTypes")

或者使用现有的控件、对象或页面而不是 div。有关 FindControl 的更多信息: http://msdn.microsoft.com/en-us/library/486wc64h(v=vs.110).aspx

但是无论你如何分割它,这里都会有一些奇怪的东西,以至于 1stReasonTypes 不知道它应该是哪个确切的列表框。

【讨论】:

  • 您在我输入时添加了更新。不知道为什么不能导入 FormsAuth。也许尝试从工具中删除所有 FormsAuth。然后创建一个名为 FormsAuth.vb 的全新类文件,将 FormsAuth 粘贴到新类中。但是,我不确定这与您的列表框问题是否相同。
  • 奇怪的是,这正是我对 admin_reasons.aspx 文件所做的,带有lstReasonTypes 错误:我创建了一个名称几乎完全相同的新文件,已复制并将 HTML 中的所有文本和后面的代码粘贴到该新文件中,它没有问题。不过,这个项目有大约 40 个文件,所以我希望我不必对每个文件都这样做。 :(
  • 与上面的其他一些 cmets 一样,此解决方案似乎有些问题。我以前见过这样的东西,某处的东西被破坏了,需要一段时间才能解决。根据您在尝试编译时遇到的大量错误,我认为您还没有找到真正的问题。 40个文件很多,但也不是不能容忍的。如果您感到绝望,您可能想要创建一个新项目和一个新解决方案,并开始一次移植一个文件,从类文件开始,并确保您可以在此过程中经常构建。
  • 我愿意,但这个项目是这里业务的关键部分(时间卡)。不幸的是,它是在一台 2000 年的服务器上,应该在 1 月 1 日下线。我应该到那时把它弄好……而且我没有写这个烂摊子! {啊!}
  • 您知道,实际上创建新表单然后将 HTML 和代码复制并粘贴到其中并不需要那么长时间。我会告诉你进展如何。
【解决方案2】:

我遇到了类似的问题,Sub 在运行时无法访问,但在编辑器中绝对合法。它通过将目标框架从 4.5.1 更改为 4.5 来解决。看来我的 IIS 只有 4.5 版本。

:)

【讨论】:

  • 所以答案是使用更新版本的框架?如果是,请更清楚地说明。
  • 微软即将结束 4.5.1。也许它是错误的。我原来帖子中的那个项目早就发货了,我们不再有代码了。因此,我无法验证您的解决方案是否能解决问题。
【解决方案3】:

如果我没记错的话,这是控件的默认属性。

您能否尝试进入包含指定控件的 admin_reasons 的设计视图,然后将控件的修饰符属性更改为公共或内部。

【讨论】:

  • 这应该没有必要,但我会尝试一下。但是,项目的每个页面中的每个控件都可以做到这一点。
  • 好的,那没用。显然在网页上,所有控件都已公开。
【解决方案4】:

我遇到了类似的问题。我通过使我的解决方案中的所有项目都以相同的 .NET Framework 4 客户端配置文件为目标,然后重新构建整个解决方案来解决这个问题。

【讨论】:

    【解决方案5】:

    重命名 App_Code 文件夹后,我短暂收到此错误。实际上,我不小心将整个文件夹拖到了 App_data 文件夹中。 VS 2015 并没有抱怨很难发现哪里出了问题。

    【讨论】:

      【解决方案6】:

      我发现在 Visual Studio 版本之间移动时,您必须注释掉包装类的命名空间:

      '命名空间表单验证

      '结束命名空间

      在其他时候,我必须取消对命名空间的注释。

      当其他开发人员使用不同版本的 VS 编辑相同的解决方案和/或我将解决方案移动(复制)到另一个位置时,这种情况发生在我身上好几次

      【讨论】:

        【解决方案7】:

        当我在 VB.Net 中错误地在续行符后面添加注释时,我发生了这个错误。我删除了评论,问题就消失了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多