powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Программа не содержит статического метода "Main", подходящего для точки входа.
9 сообщений из 9, страница 1 из 1
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842642
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь начать проект на базе другого проекта. [img=" https://drive.google.com/file/d/1Aj6bqJIhAmzvnZ5xahHsir2IGT0Pq7MO/view?usp=sharing%22%5D]https://drive.google.com/file/d/1Aj6bqJIhAmzvnZ5xahHsir2IGT0Pq7MO/view?usp=sharing"] Я что-то не то пишу в StartupUri, или проблема в чем то другом?
RiskHedging/App.xaml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<Application x:Class="RiskHedging.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="pack://application:,,,/MainFrame;component/Views/MainWindow.xaml"
             Startup="App_OnStartup"
             Exit="App_OnExit"
             >
    <Application.Resources>
         
    </Application.Resources>
</Application>


P.S. И, подскажите другие живые русскоязычные форумы по C# и WPF.
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842647
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StartupUri="pack://application:,,,/MainFrame;component/Views/MainWindow.xaml"
Startup="App_OnStartup"
на сколько я помню, можно использовать только один из этих параметров, либо 1, либо 2.
1 вызывает форму
2 вызываем метод из класс App
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842687
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
B базовом проекте такое сочетание проблем не вызывало.
App.xaml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<Application    x:Class="MainFrame.App"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                StartupUri="/Views/MainWindow.xaml"
                Startup="App_OnStartup"
                Exit="App_OnExit">
    <Application.Resources>
         
    </Application.Resources>
</Application>

App.xaml.cs
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
namespace MainFrame
{
   /// <summary>
   /// Логика взаимодействия для App.xaml
   /// </summary>
   public partial class App : Application
   {
      static App()
      {
         var resourceAssembly = Assembly.GetAssembly(typeof(App));
      }

      private void App_OnStartup(object sender, StartupEventArgs e)
      {
      }

      private void App_OnExit(object sender, ExitEventArgs e)
      {
         Store.Snapshot();
      }
   }
}


Здесь, как мне кажется, дело в другом. App.xaml в одном пространстве имен (и сборке), а MainWindow.xaml в другом. Вопрос. Можно ли так делать?
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842777
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesStartupUri="pack://application:,,,/MainFrame;component/Views/MainWindow.xaml"
Startup="App_OnStartup"
на сколько я помню, можно использовать только один из этих параметров, либо 1, либо 2.
1 вызывает форму
2 вызываем метод из класс AppОба можно одновременно использовать.
Проверенно не раз.
Сначала отрабатывает Startup потом StartupUri
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842778
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Hopgarden Я что-то не то пишу в StartupUri, или проблема в чем то другом?
Это по вашему коду и скрину не определишь.
Нужны ваши пространства имён и в каких сборках они расположены.

Поступите проще. Перенесите создание и показ component/Views/MainWindow.xaml из StartupUri в метод App_OnStartup.
Это же всего две строчки кода. Зато гадать не придётся в чём проблема.
Michael HopgardenP.S. И, подскажите другие живые русскоязычные форумы по C# и WPF.
http://www.cyberforum.ru/wpf-silverlight/.
Значительно активнее, но.... Там в основном об элементарном. Почти все начинающие, студенты.
Здесь уровень экспертов гораздо выше.
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842808
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael HopgardenЗдесь, как мне кажется, дело в другом. App.xaml в одном пространстве имен (и сборке), а MainWindow.xaml в другом. Вопрос. Можно ли так делать?
Можно, можно. Только StartupUri здесь дело пятое - если бы были проблемы с ним, то ошибки выглядели бы как-то так:
- при отсутствии сборки, в которой находится ресурс:

Код: plaintext
System.IO.FileNotFoundException: Could not load file or assembly MainFrame, Culture=neutral or one of its dependencies. The system cannot find the file specified.

- при отсутствии ресурса:

Код: plaintext
System.IO.IOException: Cannot locate resource views/mainwindow.xaml

Ошибка в заголовке темы исчерпывающе описывает причину - у запускаемой сборки отсутствует application entry point aka static void Main. И эта ошибка совсем не является специфичной для WPF. Но в WPF этот метод обычно не создают руками - он генерируется автоматически при сборке проекта. Декомпилированный App.xaml.cs выглядит как-то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Globalization;
using System.Threading;
using System.Windows;
namespace wpftest
{
  public class App : Application
  {
    private void AppStartup(object sender, StartupEventArgs e)
    {
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
      Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
    }
    [GeneratedCode("PresentationBuildTasks", "4.0.0.0"), DebuggerNonUserCode]
    public void InitializeComponent()
    {
      base.Startup += new StartupEventHandler(this.AppStartup);
      base.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
    }
    [GeneratedCode("PresentationBuildTasks", "4.0.0.0"), DebuggerNonUserCode, STAThread]
    public static void Main()
    {
      App app = new App();
      app.InitializeComponent();
      app.Run();
    }
  }
}


и чтобы в нем появились все те методы с атрибутами GeneratedCode и DebuggerNonUserCode, нужно, чтобы у App.xaml в свойствах файла было выставлено Build Action = ApplicationDefinition - скорее всего, в новом проекте эта штука слетела.
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39842940
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловнынужно, чтобы у App.xaml в свойствах файла было выставлено Build Action = ApplicationDefinition - скорее всего, в новом проекте эта штука слетела. Свойство было выставлено, слетело, где то в другом месте.
Eld HaspЭто по вашему коду и скрину не определишь.
Нужны ваши пространства имён и в каких сборках они расположены.

Поступите проще.Сборки соответствуют корневым папкам на скрине. Пространства имен совпадают с именами папок.
Перенос в код не помог. Та же ошибка.

Помогло пересоздание проекта.

Вопрос. Правильно ли я вообще выбрал подход?
Foundation - сборка отвечающая за сериализацию свойств авторства poemmuse с хабра.
MainFrame - каркас GUI - основное окно с меню, и TabContol`ом и прочим, который можно будет использовать в других проектах.
RiskHedging - там, где планируется размещать Model, VewModel, и UserConrol`ы, которые размещать в TabItem в MainFrame/Views/MainWindow
Или же лучше (правилеьнее) создать наследника RiskHedging/Views/MainWindow от MainFrame/Views/MainWindow, а не создавать расширения для классов MainFrame в пространстве RiskHedging?
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39843022
Michael Hopgarden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос. Разве точка входа не должна быть единственной?
Т.к. если я удаляю из MainFrame или из RiskHedging любой из следующих файлов - App.xaml, MainWindow.xaml, то получаю ошибку об отсутствии метода Main. В результате в обоих пространствах у меня 2 одинаковых App.xaml и один не используемый MainWindow.xaml. И честно говоря, не понимаю где у меня точка входа.
...
Рейтинг: 0 / 0
Программа не содержит статического метода "Main", подходящего для точки входа.
    #39843115
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael HopgardenИ еще вопрос. Разве точка входа не должна быть единственной?
Т.к. если я удаляю из MainFrame или из RiskHedging любой из следующих файлов - App.xaml, MainWindow.xaml, то получаю ошибку об отсутствии метода Main. В результате в обоих пространствах у меня 2 одинаковых App.xaml и один не используемый MainWindow.xaml. И честно говоря, не понимаю где у меня точка входа.
Точка входа - да, только одна. Классов с методами, сигнатура которых совпадает с сигнатурой метода точки входа - сколько угодно. Если таких методов больше одного, то :
If you have more than one class that has a Main method, you must compile your program with the /main compiler option to specify which Main method to use as the entry point. For more information, see /main (C# Compiler Options).
IDE задает этот флаг компилятора посредством передачи MSBuild элемента StartupObject (отдельный узел в .csproj-файле). В дизайнере свойств проекта этот элемент задается в поле Startup object на вкладке Application.
И если в сборке проекта приложения действительно живет несколько методов Main, а Startup object не указан, то проект просто не получится скомпилировать - будет ошибка компиляции "CS0017 Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point."
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Программа не содержит статического метода "Main", подходящего для точки входа.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]