Je suis un débutant en matière de programmation mais j'étais sûr qu'une des règles universelles était qu'un programme commence par Main (). Je n'en vois pas lorsque je crée un projet WPF. Main () est-il simplement nommé quelque chose différemment dans WPF?
128
Réponses:
Il est généré lors de la construction, mais vous pouvez fournir le vôtre (en éliminant l'ambiguïté dans les propriétés du projet si nécessaire). Recherchez dans obj / debug un fichier d'application; J'ai (avec la permission de "C # 2010 Express")
App.g.i.cs
avec:la source
App.g.cs
également. Mais j'ai essayé d'ajouterMain()
et à chaque fois que je reconstruisais mon projet, il revenait à ce que vous avez, ici. J'ai essayé de créer le mien dans une autre classe, mais Project Properties ne trouve que MyProject.App, pas l'autre classe, donc je ne peux pas le rediriger.App.xaml.cs
le studio visuel. Utilisez la barre de navigation> Liste déroulante Méthode> sélectionnezMain
(grisée). Cela vous amène àApp.g.i.cs
.La méthode Main () est créée automatiquement. Si vous souhaitez fournir le vôtre, vous devez (testé dans VS2013 et VS2017):
Ensuite, ajoutez simplement une méthode Main () à App.xaml.cs. Ça pourrait être comme ça:
la source
Main()
est automatiquement fourni par le CLR et le WPF.Le compilateur C # prend un commutateur de ligne de commande
/m
qui spécifie le type qui contient l'implémentation deMain()
. Par convention, si aucun objet de démarrage n'est explicitement spécifié, le CLR recherchera toute classe qui a uneMain()
méthode statique et l'appellera. (Comme @Marc Gravel l'a souligné dans son commentaire)Dans le cas de WPF, le
Main()
est automatiquement généré lors de la générationApp.xaml
et le commutateur / m est spécifié pour que le compilateur C # utilise cette classe comme point d'entrée. Cependant, si vous regardez les propriétés du projet, vous constaterez qu'il existe un paramètre vous permettant de choisir l'objet de démarrage. Donc, si vous le souhaitez, vous pouvez fournir votre propre classe qui implémenteMain()
.Notez que cela vous incombera de créer l'
Application
instance et d'appeler saRun()
méthode pour vous assurer que l'infrastructure WPF est démarrée correctement.la source
/m
cela, peu importe comment le type est appelé; si vous n'êtes pas explicite, il essaie simplement de trouver uneMain
méthode appropriée et se plaint s'il en trouve 0 ou plus d'une. À titre d'exemple, l'exemple "Hello World" dans la spécification de langue (§1.1) utiliseHello
comme nom de type.main()
c'est fourni par le CLR (le runtime), c'est vraiment le compilateur qui le génère.MyApp.App app = new MyApp.App();
) et l'appeler.Run()
, comme l'Main()
aurait fait la précédente . Bon appel. De plus, il faudrait ajouterapp.InitializeComponent();
avantapp.Run()
, et heureusement pour nous, laInitializeComponent()
méthode originale est toujours là (vue dans App.g.cs, donc pas besoin de rajouter celle-là!).Main()
est généré lors de la compilation. Vous pouvez le trouver dansApp.g.cs
(dans leobj/{Debug,Release}
dossier).la source
main()
est un point d'entrée standard pour une application, mais toutes les applications sont structurées de cette façon. Dans un projet XAML, le fichier App.XAML spécifie le point d'entrée où il est indiquéStartupUri="MainWindow.xaml"
.Comme indiqué par d'autres, la fonction principale réelle est générée en fonction du contenu des fichiers XAML du projet.
la source
J'ai copié des fichiers qui ne se chargeraient pas dans un autre projet sans fenêtre principale dans un nouveau et j'ai obtenu cette erreur.
Pour moi, il a fallu adopter l'approche inverse d'Andreas Kahler pour corriger:
Après avoir créé un fichier de fenêtre et défini l'URI de démarrage sur ce fichier, j'ai basculé la page sur ApplicationDefinition de la propriété App.xaml 'Build Action'.
la source
Si vous avez supprimé App.xaml par défaut et MinWindow.xaml, mieux vaut éditer .csproj Après avoir ajouté App.xaml manuellement, votre .csproj sera:
Remplacez ceci par:
la source