Visual Studio 2013 C#编译时使用main

问题描述 投票:-1回答:3

我是编程新手,我想写一个端口扫描器的代码。当我点击 构建 我收到了以下错误信息......我意识到这是同一个错误,只是在两个不同的位置,但我想列出这两个错误会有伤害。

错误1 程序'c:\Users\pat_000/Documents\Visual Studio 2013/Projects/WpfApplication2/WpfApplication2/obj\Debug/WpfApplication2.exe'定义了一个以上的入口点:'PortScanner.Program.Main(string[])'。 用main指定包含入口点的类型进行编译。

错误 2 程序'c:\Users\pat_000/Documents\Visual Studio 2013/Projects/WpfApplication2/WpfApplication2/obj/Debug/WpfApplication2.exe'有一个以上的入口点定义:'WpfApplication2.App.Main()'。 用main编译来指定包含入口点的类型。

这是我的代码。

enter code here
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Threading;
using System.Net.Sockets;
using System.Net;

namespace PortScanner
{
    class Program
    {
        static bool stop = false;
        static int startPort;
        static int endPort;

        static List<int> openPorts = new List<int>();

        static object consoleLock = new object();

        static int waitingForResponses;

        static int maxQueriesAtOneTime = 100;

        static void Main(string[] args)
        {
        begin:
            Console.WriteLine("Enter the IP Address of the target:");
            string ip = Console.ReadLine();

            IPAddress ipAddress;

            if (!IPAddress.TryParse(ip, out ipAddress))
                goto begin;

        startP:

            Console.WriteLine("Enter the starting port to start scanning on:");
            string sp = Console.ReadLine();

            if (!int.TryParse(sp, out startPort))
                goto startP;

        endP:

            Console.WriteLine("Enter the end port:");
            string ep = Console.ReadLine();

            if (!int.TryParse(ep, out endPort))
                goto endP;

            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("");

            Console.WriteLine("Press any key to stop scanning...");

            Console.WriteLine("");
            Console.WriteLine("");

            ThreadPool.QueueUserWorkItem(StartScan, ipAddress);

            Console.ReadKey();

            stop = true;

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }

        static void StartScan(object o)
        {
            IPAddress ipAddress = o as IPAddress;

            for (int i = startPort; i < endPort; i++)
            {
                lock (consoleLock)
                {
                    int top = Console.CursorTop;

                    Console.CursorTop = 7;
                    Console.WriteLine("Scanning port: {0}    ", i);

                    Console.CursorTop = top;
                }

                while (waitingForResponses >= maxQueriesAtOneTime)
                    Thread.Sleep(0);

                if (stop)
                    break;

                try
                {
                    Socket s = new Socket(AddressFamily.InterNetwork,     SocketType.Stream, ProtocolType.Tcp);

                    s.BeginConnect(new IPEndPoint(ipAddress, i), EndConnect,  s);

                    Interlocked.Increment(ref waitingForResponses);
                }
                catch (Exception)
                {

                }
            }
        }

        static void EndConnect(IAsyncResult ar)
        {
            try
            {
                DecrementResponses();

                Socket s = ar.AsyncState as Socket;

                s.EndConnect(ar);

                if (s.Connected)
               {
                    int openPort =      Convert.ToInt32(s.RemoteEndPoint.ToString().Split(':')[1]);

                    openPorts.Add(openPort);

                    lock (consoleLock)
                    {
                        Console.WriteLine("Connected TCP on port: {0}", openPort);
                    }

                    s.Disconnect(true);
                }
            }
            catch (Exception)
            {

            }
        }

        static void IncrementResponses()
        {
            Interlocked.Increment(ref waitingForResponses);

            PrintWaitingForResponses();
        }

        static void DecrementResponses()
        {
            Interlocked.Decrement(ref waitingForResponses);

            PrintWaitingForResponses();
        }

        static void PrintWaitingForResponses()
        {
            lock (consoleLock)
            {
                int top = Console.CursorTop;

                Console.CursorTop = 8;
                Console.WriteLine("Waiting for responses from {0} sockets       ", waitingForResponses);

                Console.CursorTop = top;
            }
        }
    }
}
namespace WpfApplication2
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
         public MainWindow()
        {
            InitializeComponent();
        }
    }
}
c# visual-studio-2013
3个回答
1
投票

你显然想写一个ConsoleApplication。你选择了WPFApplication。复制你的整个代码,创建一个基于ConsoleApplication的新项目,然后把你的代码粘贴到那里。

并尝试摆脱 goto的;这不是BASIC。你可以很容易的为你的三个用途做一个函数。


0
投票

试着在您的其他解决方案文件中寻找,看看是否有另一个Main()定义在其他地方,这只是混淆了编译器。


0
投票

在一个WPF应用程序中。Main() 是自动为你创建的。由于你也提供了你自己的,这就是为什么你得到的冲突。要解决这个问题。

  • 在解决方案资源管理器中右击App.xaml,选择 "属性
  • 将 "建立动作 "改为 "页面"。
© www.soinside.com 2019 - 2024. All rights reserved.