Как выбрать "Объект запуска" в свойствах проекта, когда список пуст?

У меня есть проект WPF, который я пытаюсь сделать из него единичным приложением, используя рецепт с Microsoft.VisualBasic dll, описанный Дейлом Раганом здесь, в Stackru

Это делает в Visual Studio 2013 с Framework 4.5 двойную ошибку при компиляции: "... определено более одной точки входа..." для каждой точки входа. Тогда я решил, что увижу обе точки входа в параметрах comboBox моего элемента "Startup Object" на вкладке "Application" в свойствах моего проекта. Но это пусто. Почему comboBox "StartUp object" пуст и как установить точку входа? Может ли это быть ошибкой Microsoft?

Дополнительная информация: - 2 файла с точками входа: "App.g.cs" (автоматически сгенерированный) и мой новый определенный класс с точкой входа - основной: "EntryPoint.cs"

7 ответов

Решение

Извините, ребята,

Проблема исчезла. Я перезапустил Visual Studio, но у меня было такое же поведение. Я сделал новый проект для отправки в Microsoft в качестве ошибки, но он работал нормально. Затем я скопировал мой класс запуска из моего тестового проекта, и ошибка исчезла????????? Я не понимаю

Я решил проблему, взломав файл csproj:

  <PropertyGroup>
    <StartupObject>Test.Program</StartupObject>
  </PropertyGroup>

Вы можете выполнить следующие действия (для EntryPoint):

  • Щелкните правой кнопкой мыши свое решение, Свойства, Общие свойства, Startup Project и выберите там свой Startup Project.
  • Откройте ваш app.xaml и установите StartUpUri в свой основной XAML-файл.
  • Выгрузите ваш WPF-проект и после этого отредактируйте его!

В файле App.xaml.cs вы можете поместить следующие строки кода:

using System.Diagnostics;
...
Process[] activeProcess = Process.GetProcessByName(Process.GetCurrentProcess().ProcessName);
if (activeProcess.Length == 1)
{
    Application.Run(new YOUR_MAIN_XAML_CLASS_HERE());
}
else
{
    MessageBox.Show("You already have an instance of this program");
}

Надеюсь, поможет

Трудно предсказать, не просматривая код. Тем не менее, убедитесь, что следующие пункты покрыты.

Создайте класс, производный от Microsoft.VisualBasic.ApplicationServices,WindowsFormsApplicationBaseи использовать его, чтобы обернуть ваш WPF System.Windows.Application, Оболочка инициализируется путем предоставления вашей собственной реализации Main,

namespace SingleInstanceNamespace
{
    using System;
    using System.Windows;
    using Microsoft.VisualBasic.ApplicationServices;

    public class SingleInstanceManager : WindowsFormsApplicationBase
    {
        public SingleInstanceManager()
        {
            this.IsSingleInstance = true;
        }

        protected override bool OnStartup(
            Microsoft.VisualBasic.ApplicationServices.StartupEventArgs eventArgs)
        {
            base.OnStartup(eventArgs);
            App app = new App(); //Your application instance
            app.Run();
            return false;
        }

        protected override void OnStartupNextInstance(
            StartupNextInstanceEventArgs eventArgs)
        {
            base.OnStartupNextInstance(eventArgs);
            string args = Environment.NewLine;
            foreach (string arg in eventArgs.CommandLine)
                {
                args += Environment.NewLine + arg;
                }
            string msg = string.Format("New instance started with {0} args.{1}",
            eventArgs.CommandLine.Count,
            args);
            MessageBox.Show(msg);
        }
    }
}

Следующий блок кода детализирует содержание App.cs файл, в котором определена основная точка входа приложения:

namespace SingleInstanceNamespace
{
    public class MyApp
    {
        [STAThread]
        public static void Main(string[] args)
        {
            //Create our new single-instance manager
            SingleInstanceManager manager = new SingleInstanceManager();
            manager.Run(args);
        }
    }
}

В моем случае формы также отсутствовали в раскрывающемся списке объектов автозагрузки. Итак, я нашел другой простой способ изменить форму запуска.

  1. Открой Program.cs файл в представлении кода
  2. Перейти к static void Main()
  3. Измените строку, которая выглядит следующим образом:

Application.Run(new Form1());

На желаемую форму, как это:
Application.Run(new BootloaderDialog());

Надеюсь это поможет!

В моем случае я записал имя записи Main() в main(), затем эта запись не была добавлена ​​в список объектов запуска. Когда я изменил его на Main(), запись была добавлена ​​в список объектов запуска. Так что будьте осторожны с учетом регистра.

Я хотел, чтобы «MyMainWindow» был начальным элементом для проекта «MyProject».

В App.xaml нужно было установить:

      <Application x:Class="MyProject.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:MyProject"
         StartupUri="MyMainWindow.xaml">
<Application.Resources>
     
</Application.Resources>
Другие вопросы по тегам