我正在使用VS2013进行VB.NET WPF应用程序,我只是想找到并使用正确的入口点。
我已经阅读了大量的答案,一个说了些什么而另一个说了相反的。主要是他们说:你的项目的入口点是你可以在Application.g.vb中找到的自动生成的main()。是的,好的,非常好但是......它是一个生成的文件,修改它不是一个好主意。所以我在网上搜索了如何实现我自己的main()方法,我发现的常见答案是:
使用此签名在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
答案 0 :(得分:1)
我设法重现了你的问题:
Main
文件中的自定义Application.xaml.vb
Enable Application Framework
(自动启动对象成为我们的主要子)Build Action
属性为Page
此时,调用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中定义的方法。
另请检查:http://ugts.azurewebsites.net/data/UGTS/document/2/3/32.aspx