如何选择“启动”对象?在项目属性中,而列表框为空

本文关键字:属性 项目 列表 选择 何选择 对象 启动 | 更新日期: 2023-09-27 17:51:09

我有一个WPF项目,我试图使它成为一个使用微软配方的单实例应用程序。VisualBasic dll由Dale Ragan在StackOverflow上描述

在Visual Studio 2013与框架4.5中这样做,在编译时给我两倍相同的错误:"…为每个入口点定义了多个入口点。然后,我认为我会在项目属性的"应用程序"选项卡的"启动对象"项的组合框选项中看到两个入口点。但它是空的。为什么"启动对象"组合框是空的,如何设置入口点?会不会是微软的漏洞?

附加信息:-有入口点的2个文件是"App.g.cs"(自动生成)和我新定义的类入口点- main:"EntryPoint.cs"

如何选择“启动”对象?在项目属性中,而列表框为空

我已经通过破解csproj文件解决了这个问题:

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

抱歉,

问题消失。我重新启动了Visual Studio,但还是出现了相同的行为。我做了一个新项目,作为一个bug发送给微软,但它运行良好。然后我从我的测试项目中复制了我的启动类,bug消失了?????????我不明白。

您可以遵循以下步骤(对于EntryPoint):

    右键单击您的解决方案,属性,常用属性,启动项目,然后选择你的启动项目。
  • 打开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>