BC30451: 名称“<name>”未声明

语句引用一个编程元素,但编译器无法找到具有相同名称的元素。

错误 ID:BC30451

更正此错误

  1. 检查引用语句中名称的拼写。 Visual Basic 不区分大小写,但拼写中的任何其他变化都被视为完全不同的名称。 请注意,下划线 (_) 是名称的一部分,因此也是拼写的一部分。

  2. 确保对象及其成员之间具有成员访问运算符 (.)。 例如,如果你拥有名为 TextBoxTextBox1控件,则要键入 Text 才可访问其 TextBox1.Text。 如果你转而键入 TextBox1Text,则会创建不同的名称。

  3. 如果拼写正确并且任何对象成员访问的语法正确,请验证该元素是否已被声明。 有关详细信息,请参阅声明的元素

  4. 如果编程元素已声明,请检查编程元素是否在范围内。 如果引用语句位于声明编程元素的区域外,则可能需要限定元素名称。 有关详细信息,请参阅 Scope in Visual Basic

  5. 如果你未使用完全限定类型或类型和成员名称(例如,你的代码将属性称为 MethodInfo.Name 而不是 System.Reflection.MethodInfo.Name),请添加 Imports 语句。

  6. 如果你尝试编译 SDK 样式的项目(带有以 <Project Sdk="Microsoft.NET.Sdk"> 行开头的 *.vbproj 文件的项目),并且错误消息涉及了 Microsoft.VisualBasic.dll 程序集中的类型或成员,请将你的应用程序配置为使用对 Visual Basic 运行时库的引用进行编译。 默认情况下,库的一个子集嵌入 SDK 样式项目中的程序集。

    例如,下面的示例无法编译,因为找不到 Microsoft.VisualBasic.CompilerServices.Conversions.ChangeType 方法。 它不会嵌入到应用程序附带的 Visual Basic 运行时的子集中。

    Imports Microsoft.VisualBasic.CompilerServices
    
    Public Module Example
        Sub Main(args As String())
            Dim originalValue As String = args(0)
            Dim t As Type = GetType(Int32)
            Dim i As Int32 = Conversions.ChangeType(originalValue, t)
            Console.WriteLine($"'{originalValue}' --> {i}")
        End Sub
    End Module
    

    要解决此错误,请将 <VBRuntime>Default</VBRuntime> 元素添加到项目的 <PropertyGroup> 部分,如下面的 Visual Basic 项目文件所示。

    <Project Sdk="Microsoft.NET.Sdk">
      <ItemGroup>
          <Reference Include="Microsoft.VisualBasic" />
        </ItemGroup>
      <PropertyGroup>
        <VBRuntime>Default</VBRuntime>
        <OutputType>Exe</OutputType>
        <RootNamespace>vbruntime</RootNamespace>
        <TargetFramework>net472</TargetFramework>
      </PropertyGroup>
    
    </Project>
    

另请参阅