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?
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();
}
}
}
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();
}
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.
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}
).
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.
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'.
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>
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