从 MS 示例创建 Windows 服务时出现错误“无法找到 xxxx.为主方法指定的程序”

问题描述 投票:0回答:5

我正在按照 此 Microsoft 指南来创建 Windows 服务

但是,当我尝试在名为“Program.cs”的自动生成页面上构建它时 里面有这段代码

namespace BetfairBOTV2Service
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new BrainiacVersion2() // not green though!!!!!
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}

我收到为 Main 方法指定的错误“找不到 BrainiacV2.Program”

我做了教程告诉我的一切。

我有一个App.Config,一个Program.cs(上面的代码),一个BrainiacV2.cs,它保存了我所有的服务代码,并像这样开始

namespace BetfairBOTV2Service
{
    public partial class BrainiacV2 : ServiceBase
    {
        public BrainiacV2()
        {
            InitializeComponent();

我的 ProjectInstaller.cs 上有两个安装程序对象 (名称)服务安装程序 显示名称:我的新 BetfairBotV2 服务名称:BrainiacVersion2

就是这样。

这是我遇到的唯一错误

该解决方案称为 BrainiacV2

我尝试将 Program.cs 中的代码更改为

新的 BrainiacV2()

它变成绿色,但然后我就明白了

找不到为主方法指定的 BrainiacV2.Program。

我做错了什么或需要改变什么?

任何帮助将不胜感激 - 谢谢!

Win 7、64 位、.NET 4.5、C#

.net windows c#-4.0 service windows-services
5个回答
54
投票

重命名项目和默认命名空间后。我也必须改变这一点:

enter image description here

因此,在您创建项目时,默认的 Main 位于 BrainiacV2.Program 中,但您确实希望在 BetfairBOTV2Service.Program 中运行 Main


2
投票

我必须改变我的命名空间和类。这与该错误无关(不是很有帮助!)

namespace BrainiacV2
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new Brainiac()
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}

一旦我做到了,一切都成功了!

看来是命名空间问题。

如果错误消息更有帮助的话那就太好了,因为涉及很多猜测工作!

感谢您的帮助。


0
投票

看起来您指定了错误的类名。请参阅下面的评论。

namespace BetfairBOTV2Service
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new BrainiacVersion2(); // <-- this is what you have
                new BrainiacV2();       // <-- this is what you need
            };
            ServiceBase.Run(ServicesToRun);
        }
    }
}

FWIW,我有几个教程 - herehere - 向您展示如何创建服务并让它自行安装。

HTH


0
投票

几分钟前我遇到了同样的问题,在网上搜索解释时,我发现了这篇文章。多年来你可能已经找到了答案 但我想分享我的解决方案。 当我更改 Program 类的命名空间时,我的项目出现了错误。 通过将启动项目与新的命名空间对齐,我的项目再次运行。

因此,就您而言,启动项目应成为 BetfairBOTV2Service.Program。


0
投票

就我而言,我重命名了我的解决方案和许多其他文件并给出了此错误。 解决了:在 csProj 文件中,启动文件仍然具有现已更改的旧名称,因此更改后,我能够成功构建。

© www.soinside.com 2019 - 2024. All rights reserved.