VB.NET收到错误:Class' Application'必须实现Sub InitializeComponent()'

时间:2016-03-06 12:53:30

标签: vb.net entry-point

我正在使用VS2013进行VB.NET WPF应用程序,我只是想找到并使用正确的入口点。

我已经阅读了大量的答案,一个说了些什么而另一个说了相反的。主要是他们说:你的项目的入口点是你可以在Application.g.vb中找到的自动生成的main()。是的,好的,非常好但是......它是一个生成的文件,修改它不是一个好主意。所以我在网上搜索了如何实现我自己的main()方法,我发现的常见答案是:

  • 选择Application.xaml并将其构建操作更改为" Page"
  • 使用此签名在Application.xaml.vb中创建自己的main方法:

    _ Public Shared Sub Main()     Dim app As Application = New Application()     app.InitializeComponent()     app.Run() End Sub

  • 转到您的项目属性,取消选中"启用应用框架"并选择Sub Main作为应用程序的启动。

所以我做了但我不断得到这个错误: 错误3类'应用程序'必须实现Sub InitializeComponent()' for interface' System.Windows.Markup.IComponentConnector'。

这是它生成的Application.g.i.vb文件:

    #ExternalChecksum("..\..\Application.xaml","{406ea660-64cf-4c82-b6f0-42d48172a799}","DB788882721B2B27C90579D5FE2A0418")
'------------------------------------------------------------------------------
' <auto-generated>
'     This code was generated by a tool.
'     Runtime Version:4.0.30319.42000
'
'     Changes to this file may cause incorrect behavior and will be lost if
'     the code is regenerated.
' </auto-generated>
'------------------------------------------------------------------------------

Option Strict Off
Option Explicit On

Imports System
Imports System.Diagnostics
Imports System.Windows
Imports System.Windows.Automation
Imports System.Windows.Controls
Imports System.Windows.Controls.Primitives
Imports System.Windows.Data
Imports System.Windows.Documents
Imports System.Windows.Ink
Imports System.Windows.Input
Imports System.Windows.Markup
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Media.Effects
Imports System.Windows.Media.Imaging
Imports System.Windows.Media.Media3D
Imports System.Windows.Media.TextFormatting
Imports System.Windows.Navigation
Imports System.Windows.Shapes
Imports System.Windows.Shell


'''<summary>
'''Application
'''</summary>
<Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Public Class Application
    Inherits System.Windows.Application
    Implements System.Windows.Markup.IComponentConnector

    Private _contentLoaded As Boolean

    '''<summary>
    '''InitializeComponent
    '''</summary>
    <System.Diagnostics.DebuggerNonUserCodeAttribute(), _
     System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")> _
    Public Sub InitializeComponent()

        #ExternalSource("..\..\Application.xaml",4)
        Me.StartupUri = New System.Uri("MainWindow.xaml", System.UriKind.Relative)

        #End ExternalSource
        If _contentLoaded Then
            Return
        End If
        _contentLoaded = True
        Dim resourceLocater As System.Uri = New System.Uri("/FatLink;component/application.xaml", System.UriKind.Relative)

        #ExternalSource("..\..\Application.xaml",1)
        System.Windows.Application.LoadComponent(Me, resourceLocater)

        #End ExternalSource
    End Sub

    <System.Diagnostics.DebuggerNonUserCodeAttribute(), _
     System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0"), _
     System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never), _
     System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes"), _
     System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity"), _
     System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")> _
    Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
        Me._contentLoaded = True
    End Sub
End Class

所以......因为Sub InitializeComponent()就在那里,为什么我一直都会遇到这个错误?

**编辑:**我的Application.xaml.vb只是:

Partial Public Class Application
    <System.STAThreadAttribute(), _
System.Diagnostics.DebuggerNonUserCodeAttribute(), _
System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")> _
    Public Shared Sub Main()
        Dim app As Application = New Application()
        app.InitializeComponent()
        app.Run()
    End Sub

End Class

2 个答案:

答案 0 :(得分:1)

我设法重现了你的问题:

  1. 创建新的WPF VB.NET应用程序
  2. 从帖子
  3. 创建Main文件中的自定义Application.xaml.vb
  4. 在项目属性中取消选中Enable Application Framework(自动启动对象成为我们的主要子)
  5. 为Application.xaml文件设置Build Action属性为Page
  6. 此时,调用app.InitializeComponent()的行用红色波浪线加下划线表示项目找不到InitializeComponent方法。如果此时尝试编译,则会出现上述错误。

    最后一步:

    在Application.xaml文件中删除

      StartupUri="MainWindow.xaml"
    

    现在,波形消失,编译正确结束。

    如果您想要启动自己的主窗口,可以使用

    更改“运行”行
     app.Run(New MainWindow())
    

答案 1 :(得分:0)

如果您收到错误,可能还没有说明您的应用是以Main()方式开头的。所以:

&#34;转到项目设置并取消选中启用应用程序框架复选框(如果已勾选)并选择Sub Main作为Startup对象,然后将main方法添加到Application.xaml.vb(加上记录器和其他东西)。&#34;

当你这样做时,VS不会创造自己的&#34;主要方法,而宁愿调用您在Application.xaml中定义的方法。

取自:https://social.msdn.microsoft.com/Forums/vstudio/en-US/d7ef493f-27be-4f32-8ff4-a014078f572c/custom-systemwindowsapplication-in-vb-net?forum=wpf

另请检查:http://ugts.azurewebsites.net/data/UGTS/document/2/3/32.aspx