2016-03-06 4 views
1

Я делаю приложение WPF VB.NET с использованием VS2013, и я просто пытаюсь найти и использовать правильную точку входа.Ошибка получения VB.NET: Class 'Application' должен реализовать 'Sub InitializeComponent()'

Я прочитал множество ответов на это, один сказал что-то, а другое сказал наоборот. В основном они говорят: точкой входа вашего проекта является автогенерированная main(), которую вы можете найти в своем приложении Application.g.vb. Да, хорошо, очень приятно, но ... это сгенерированный файл, не рекомендуется его модифицировать. Так что я искал в сети о том, как реализовать метод мой собственный основной(), и общий ответ, который я нашел это:

  • Выберите Application.xaml и изменить его сборки действие на «страницы»
  • Создать собственный основной метод в Application.xaml.vb с этой подписью:

    _ Public Shared Sub Main() Dim приложение Как Application = Новое приложение() app.InitializeComponent() app.Run() End Sub

  • Перейдите к своим свойствам проекта, отключите «Включить фреймворк приложения» и выберите Sub Main в качестве запуска для вашего приложения.

И так я сделал, но я постоянно получаю эту ошибку: Ошибка 3 класса 'Application' должен реализовать 'Sub InitializeComponent()' для интерфейса '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() есть, почему, черт возьми, я получаю эту ошибку?

** EDIT: ** Мой 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

И код _whole_, который содержит основной функцией является? – Steve

+0

Я только что добавил приложение Sub Main в класс, все еще не делая ничего в этом файле. Кстати, я редактировал сообщение, чтобы добавить файл while. –

+0

_Partial Public Class Application_ – Steve

ответ

1

мне удалось воспроизвести вам проблему:

  1. Создать новый WPF VB.NET приложений
  2. Создания пользовательских Main в файле Application.xaml.vb, как из вашего поста
  3. В свойствах проекта снимите Enable Application Framework (автоматически объект запуска становится нашим Основной суб)
  4. Набора для Application.xaml подати Build Action недвижимости в Page

на данный момент, линия, называют app.InitializeComponent() подчеркнут красной волнистой линией, чтобы показать, что проект не может найти метод InitializeComponent. Если вы попытаетесь скомпилировать этот момент, вы получите указанную ошибку.

Заключительный шаг:

В Application.xaml файле удалить

StartupUri="MainWindow.xaml" 

Теперь закорючка исчезает и компиляция завершается правильно.

Если вы хотите начать у вас есть главное окно, которое вы могли бы изменить Run строку с

app.Run(New MainWindow()) 
+0

Еще раз спасибо Стив. Вы правы, так что ошибка исчезла, но MainWindow не запущен, поэтому приложение просто запускается, но ничего не появляется. Должен ли я каким-то образом запустить основное приложение xaml? –

+0

, запустите (новый MainWindow()) – Steve

+0

Стив ... Я люблю тебя: СПАСИБО, С ВАШИМ ПОСЛЕДНИМ РЕДАКТОМ ЭТО РАБОТАЕТ !!!!!!! –

0

Если вы получаете эту ошибку, вы, вероятно, не указано, что ваше приложение, чтобы начать с Main() метод. Итак:

«Переход к настройкам проекта и снятие флажка Включить фрейм фреймворка (если он отмечен галочкой) и выбрать Sub Main в качестве объекта« Запуск », а затем добавить свой основной метод в Application.xaml.vb (плюс журнал и другие вещи)."

Когда вы это сделаете, VS не будет создавать «свой собственный» Основной метод и скорее вызовет тот, который вы определили в 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

+0

Спасибо за ваш ответ Romias, но я прочитал этот пост в msdn social, и я сделал то, что предлагал там (отметьте мой пост, я упоминаю об этом) –

+0

О вашем EDIT: уже прочитал эту ссылку, и это причина, по которой я написал «кто-то говорит что-то, говорящее наоборот». В конце страницы, которую вы опубликовали, в ней указано: «..point для объекта запуска для« Sub Main »и« Enable application framework ». Это означает, что« отметьте »флажок MSDN говорит« UNtick ». –

+0

Хорошо, если вы читали и применяли оба подхода и не работали ... не знаю, что это может быть. – Romias