@splunk

C#. Почему нельзя обратиться к классу другого проекта, если в том проекте нет метода Main ()?

Создал солюшен. Добавил в него 2 проекта - A и B. Для А указал ссылку на B.
Проект А:
class ClassStart
    {
        static void Main(string[] args)
        {
            Class2.Run();
        }
    }

Проект B:
class Class1
    {
       static void Main(string[] args)  {  }
    }


    public class Class2
    {
        public static void Run()
        {
            System.Console.WriteLine("hello");
            System.Console.ReadLine();
        }
    }

Если убрать метод Main () из класса Class1, то возникает ошибка:
Программа "..." не содержит статического метода "Main", подходящего для точки входа B

Объясните новичку почему так происходит? Зачем в другом проекте нужна точка входа, когда я обращаюсь к другому классу Class2? При этом Class1 не взаимодействует с Class2.
  • Вопрос задан
  • 2500 просмотров
Решения вопроса 1
@carbon88
.NET developer/ORM developer
Смотрите, я вижу две ситуации
1) Проект А это приложение то есть имеет расширение EXE. Проект Б это подключаемая библиотека то есть dll.
2) Проект А и проект Б это оба приложения то есть имеют расширение EXE. (предполагаю у вас именно так).

Чтобы ОС могла запустить приложение она должна найти в нем метод MAIN с определенной сигнатурой. Это так сказать общая точка входа, и поэтому во втором случае оба проекта должны иметь этот метод.

Давайте я вам немножко доп. инфы про .net отсыплю. Дело в том что в .NET и .exe и .dll файлы это сборки и они имеют практически идентичную структуру, различие только в том что в валидной .exe сборке обязательно есть этот самый метод MAIN.
я может сейчас взорву вам мозг, но проект приложения может использовать ссылки и на .dll и на .exe .net-сборки и я очень даже уверен что смогу зареференсить .exe сборку в проект .dll сборки. такие вот дела

обычно в солюшине (то есть в решении) есть проект некого приложения, которое общается с пользователем и есть проекты библиотек куда выносится какой-то общий код. но также есть решения где все проекты это проекты библиотек и вообще нет приложений.

вы легко можете сменить тип одного из проектов на библиотеку классов и будет вам счастье.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
Потому, что у вас проект запускаемый, который в EXE компилируется, создайте второй проект типа Библиотека классов и будет вам счастье (она будет компилироваться в DLL).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы