Brak Main() w WPF?

Jestem początkujący, jeśli chodzi o programowanie, ale byłem pewien, że jedną z uniwersalnych zasad było to, że program zaczyna się od Main(). Nie widzę go podczas tworzenia projektu WPF. Czy Main () po prostu nazywa się inaczej w WPF?

Author: HireThisMarine, 2010-04-23

7 answers

Jest generowany podczas budowania, ale możesz podać swój własny (w razie potrzeby rozszyfrować go w project-properties). Poszukaj w obj / debug pliku aplikacji; mam (dzięki uprzejmości "C# 2010 Express") App.g.i.cs z:

namespace WpfApplication1 {


    /// <summary>
    /// App
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public partial class App : System.Windows.Application {

        /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent() {

            #line 4 "..\..\..\App.xaml"
            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

            #line default
            #line hidden
        }

        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public static void Main() {
            WpfApplication1.App app = new WpfApplication1.App();
            app.InitializeComponent();
            app.Run();
        }
    }
}
 64
Author: Marc Gravell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 21:37:36

Metoda Main () jest tworzona automatycznie. Jeśli chcesz podać swój własny, musisz (przetestować w VS2013 i VS2017):

  • Kliknij prawym przyciskiem myszy aplikację.xaml w Eksploratorze rozwiązań wybierz Właściwości
  • Zmień "Build Action" na "Page" (wartość początkowa to "ApplicationDefinition")

Następnie wystarczy dodać metodę Main () do aplikacji.xaml.cs. Może być tak:

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}
 86
Author: Andreas Kahler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-16 08:54:57

Main() jest automatycznie dostarczane przez CLR i WPF.

Kompilator C# pobiera przełącznik wiersza poleceń /m, który określa typ, który zawiera implementację Main(). Zgodnie z konwencją, jeśli żaden obiekt startowy nie jest jawnie określony, CLR wyszukuje dowolną klasę, która ma statyczną metodę Main() i wywoła ją. (Jak zauważył @Marc Gravel w swoim komentarzu)

W przypadku WPF, Main() jest generowany automatycznie po zbudowaniu App.xaml i określeniu przełącznika /m aby kompilator C# używał tej klasy jako punktu wejścia. Jeśli jednak spojrzysz na właściwości projektu, znajdziesz tam ustawienie, aby wybrać obiekt uruchamiania. Więc jeśli chcesz, możesz podać własną klasę, która implementuje Main().

Zwróć uwagę, że to spowoduje, że będziesz odpowiedzialny za utworzenie instancji Application i wywołanie jej metody Run() w celu zapewnienia prawidłowego uruchomienia infrastruktury WPF.

 13
Author: Franci Penov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 22:08:25

Main() jest generowany podczas kompilacji. Można go znaleźć w App.g.cs (w folderze obj/{Debug,Release}).

 6
Author: Vlad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 21:36:38

main() jest standardowym punktem wejścia dla aplikacji, ale wszystkie aplikacje są tak skonstruowane. W projekcie XAML, aplikacja.Plik XAML określa punkt wejścia, w którym jest napisane StartupUri="MainWindow.xaml".

Jak twierdzą inni, rzeczywista główna funkcja jest generowana na podstawie zawartości plików XAML w projekcie.

 5
Author: Annath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 21:39:12

Skopiowałem pliki, które nie ładowałyby się w innym projekcie, który był bez mainwindow, do nowego i dostałem ten błąd.

Dla mnie trzeba było zrobić odwrotne podejście do Andreasa Kahlera, aby naprawić:

Po zrobieniu pliku okna i ustawieniu Uri startowego do tego pliku przełączyłem stronę na ApplicationDefinition of App.właściwość XAML 'Build Action'.

 0
Author: Declan Taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-14 10:18:21

W przypadku usunięcia domyślnej aplikacji.xaml i MinWindow.xaml, lepiej edytować .csproj Po dodaniu Aplikacji.XAMLcsproj będzie:

<Page Include ="App.xaml">
       <DependentUpon>MSBuild:Compile</DependentUpon>
       <SubType>Code</SubType>
</Page>

Zmień to na:

<ApplicationDefinition Include="App.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
</ApplicationDefinition>
 0
Author: user10372515,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-16 23:48:47