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

语句引用编程元素,但编译器找不到具有该确切名称的元素。

错误 ID: BC30451

更正此错误

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

  2. 检查对象与其成员之间是否具有成员访问运算符 (.)。 例如,如果你有一个名为TextBoxTextBox1的控件,若要访问其Text属性,则应键入TextBox1.Text。 如果改为键入 TextBox1Text,则已创建其他名称。

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

  4. 如果已声明编程元素,请检查它是否在范围内。 如果引用语句位于声明编程元素的区域之外,则可能需要限定元素名称。 有关详细信息,请参阅 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>
    

另请参阅