Sou iniciante em programação, mas tinha certeza de que uma das regras universais era que um programa fosse iniciado com Main (). Não vejo um quando crio um projeto WPF. Main () é simplesmente nomeado algo diferente no WPF?
Ele é gerado durante a construção, mas você pode fornecer o seu próprio (desambiguando-o nas propriedades do projeto, conforme necessário). Procure em obj / debug por um arquivo de aplicativo; Eu tenho (cortesia de "C # 2010 Express") App.g.i.cscom:
A mesma coisa existe App.g.cstambém. Mas eu tentei adicionar Main()e toda vez que reconstruir meu projeto, ele voltará ao que você tem aqui. Tentei criar o meu em outra classe, mas as Propriedades do projeto encontram apenas o MyProject.App, não a outra classe, portanto, não é possível redirecioná-lo.
vapcguy
1
Como alternativa, abra App.xaml.csno visual studio. Use a barra de navegação> lista suspensa Método> selecione Main(acinzentado). Isso leva você a App.g.i.cs.
usar o seguinte código
136
O método Main () é criado automaticamente. Se você deseja fornecer o seu próprio, é necessário (testado no VS2013 e VS2017):
Clique com o botão direito do mouse em App.xaml no gerenciador de soluções, selecione Propriedades
Altere 'Build Action' para 'Page' (o valor inicial é 'ApplicationDefinition')
Em seguida, basta adicionar um método Main () ao App.xaml.cs. Poderia ser assim:
[STAThread] define o modelo de encadeamento COM para seu aplicativo. Geralmente, você apenas define como STA e não precisa se preocupar com o que faz exatamente. Caso esteja interessado, consulte msdn.microsoft.com/de-de/library/…
Andreas Kahler
Não faça isso! Isso interromperá permanentemente StaticResources definido em App.xaml em Styles no Designer para todo o projeto.
Himbeer
13
Main() é fornecido automaticamente pelo CLR e pelo WPF.
O compilador C # usa uma opção de linha de comando /mque especifica o tipo que contém a implementação Main(). Por convenção, se nenhum objeto de inicialização for especificado explicitamente, o CLR pesquisará qualquer classe que tenha um Main()método estático e o chamará. (Como @Marc Gravel apontou em seu comentário)
No caso do WPF, o Main()é gerado automaticamente quando App.xamlé construído e a opção / m é especificada para fazer com que o compilador C # use essa classe como ponto de entrada. Porém, se você observar as propriedades do projeto, encontrará uma configuração para escolher o objeto de inicialização. Portanto, se você quiser, pode fornecer sua própria classe que implementa Main().
Observe que isso colocará a responsabilidade de você criar a Applicationinstância e chamar seu Run()método para garantir que a infraestrutura do WPF seja iniciada corretamente.
Na verdade, sem /mele não se importa com o que o tipo é chamado; se você não for explícito, ele apenas tenta encontrar umMain método adequado e reclama se encontra 0 ou mais de um. Como exemplo, o exemplo "Hello World" na especificação de idioma (§1.1) usa Hellocomo o nome do tipo.
Marc Gravell
2
Para ser pedante: não é realmente preciso dizer que main()é fornecido pelo CLR (o tempo de execução), é realmente o compilador que o gera.
Hank
Adicionado meu +1 para lembrar o público que eles terão que adicionar em sua própria instância de aplicativo (ou seja MyApp.App app = new MyApp.App();) e invocá .Run()-lo, como o anterior Main(). Boa decisão. Além disso, teria que adicionar app.InitializeComponent();antes app.Run()e, felizmente para nós, o InitializeComponent()método original ainda está lá (visto em App.g.cs, portanto, não há necessidade de adicioná-lo de volta!).
vapcguy
7
Main()é gerado durante a compilação. Você pode encontrá-lo em App.g.cs(na obj/{Debug,Release}pasta).
main()é um ponto de entrada padrão para um aplicativo, mas todos os aplicativos são estruturados dessa maneira. Em um projeto XAML, o arquivo App.XAML especifica o ponto de entrada onde diz StartupUri="MainWindow.xaml".
Como afirmado por outros, a função principal real é gerada com base no conteúdo dos arquivos XAML no projeto.
Copiei arquivos que não seriam carregados em outro projeto que estava sem uma janela principal em um novo e recebi esse erro.
Para mim, foi preciso fazer a abordagem oposta a Andreas Kahler para corrigir:
Depois de criar um arquivo de janela e definir a interface de inicialização para esse arquivo, mudei a página para ApplicationDefinition da propriedade App.xaml 'Build Action'.
Respostas:
Ele é gerado durante a construção, mas você pode fornecer o seu próprio (desambiguando-o nas propriedades do projeto, conforme necessário). Procure em obj / debug por um arquivo de aplicativo; Eu tenho (cortesia de "C # 2010 Express")
App.g.i.cs
com:fonte
App.g.cs
também. Mas eu tentei adicionarMain()
e toda vez que reconstruir meu projeto, ele voltará ao que você tem aqui. Tentei criar o meu em outra classe, mas as Propriedades do projeto encontram apenas o MyProject.App, não a outra classe, portanto, não é possível redirecioná-lo.App.xaml.cs
no visual studio. Use a barra de navegação> lista suspensa Método> selecioneMain
(acinzentado). Isso leva você aApp.g.i.cs
.O método Main () é criado automaticamente. Se você deseja fornecer o seu próprio, é necessário (testado no VS2013 e VS2017):
Em seguida, basta adicionar um método Main () ao App.xaml.cs. Poderia ser assim:
fonte
Main()
é fornecido automaticamente pelo CLR e pelo WPF.O compilador C # usa uma opção de linha de comando
/m
que especifica o tipo que contém a implementaçãoMain()
. Por convenção, se nenhum objeto de inicialização for especificado explicitamente, o CLR pesquisará qualquer classe que tenha umMain()
método estático e o chamará. (Como @Marc Gravel apontou em seu comentário)No caso do WPF, o
Main()
é gerado automaticamente quandoApp.xaml
é construído e a opção / m é especificada para fazer com que o compilador C # use essa classe como ponto de entrada. Porém, se você observar as propriedades do projeto, encontrará uma configuração para escolher o objeto de inicialização. Portanto, se você quiser, pode fornecer sua própria classe que implementaMain()
.Observe que isso colocará a responsabilidade de você criar a
Application
instância e chamar seuRun()
método para garantir que a infraestrutura do WPF seja iniciada corretamente.fonte
/m
ele não se importa com o que o tipo é chamado; se você não for explícito, ele apenas tenta encontrar umMain
método adequado e reclama se encontra 0 ou mais de um. Como exemplo, o exemplo "Hello World" na especificação de idioma (§1.1) usaHello
como o nome do tipo.main()
é fornecido pelo CLR (o tempo de execução), é realmente o compilador que o gera.MyApp.App app = new MyApp.App();
) e invocá.Run()
-lo, como o anteriorMain()
. Boa decisão. Além disso, teria que adicionarapp.InitializeComponent();
antesapp.Run()
e, felizmente para nós, oInitializeComponent()
método original ainda está lá (visto em App.g.cs, portanto, não há necessidade de adicioná-lo de volta!).Main()
é gerado durante a compilação. Você pode encontrá-lo emApp.g.cs
(naobj/{Debug,Release}
pasta).fonte
main()
é um ponto de entrada padrão para um aplicativo, mas todos os aplicativos são estruturados dessa maneira. Em um projeto XAML, o arquivo App.XAML especifica o ponto de entrada onde dizStartupUri="MainWindow.xaml"
.Como afirmado por outros, a função principal real é gerada com base no conteúdo dos arquivos XAML no projeto.
fonte
Copiei arquivos que não seriam carregados em outro projeto que estava sem uma janela principal em um novo e recebi esse erro.
Para mim, foi preciso fazer a abordagem oposta a Andreas Kahler para corrigir:
Depois de criar um arquivo de janela e definir a interface de inicialização para esse arquivo, mudei a página para ApplicationDefinition da propriedade App.xaml 'Build Action'.
fonte
Caso você tenha removido o App.xaml e o MinWindow.xaml padrão, é melhor editar .csproj Após adicionar o App.xaml manualmente, o seu .csproj será:
Mude para:
fonte