• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kilka funkcji main w jednym projekcie

0 głosów
896 wizyt
pytanie zadane 14 grudnia 2022 w C# przez zig Nowicjusz (160 p.)
Jak w vscode posiadać kilka programów C# z funkcją main w jednym projekcie i uruchamiać je osobno? Na przykład w Javie czy Kotlinie mogę skompilować każdy program main1, main2 osobno. W C# muszę utworzyć nowy projekt do każdego Program.cs. Nie chcę kasować swoich napisanych programów i nie chce mi się za każdym razem do małego programu z tutorialu tworzyć nowego projektu. Jest na to jakieś rozwiązanie?

https://stackoverflow.com/questions/11551412/multiple-main-functions

1 odpowiedź

0 głosów
odpowiedź 14 grudnia 2022 przez Wiciorny Ekspert (281,250 p.)

Możesz mieć kilka metod w projekcie i określić "start-up" main - który ma być głównym plikiem uruchomieniowym na daną chwilę.
https://rakshitpai.com/2021/01/02/setting-the-startup-class-in-visual-studio-code/
https://www.youtube.com/watch?v=x9451qbdXFQ&ab_channel=InterviewPoint
Konfiguracje możesz  ustawić w plikach https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/

 Na przykład w Javie czy Kotlinie mogę skompilować każdy program main1, main2 osobno

i tutaj też kompilować możesz osobno, z tym,że kompilacja to nie uruchomienie. W Javie nie uruchomisz na raz kilku method main, chyba że mowa o uruchamianiu w każdym osobnym wątku
Nadal jednak jeden proces główny zarządzający maszyną wirtualną będzie tworzył podrzędne czy to wątki czy procesy 

komentarz 14 grudnia 2022 przez zig Nowicjusz (160 p.)
W Javie każda klasa wygeneruje plik .class, zanim zostanie skompilowana do pliku JAR lub innego formatu binarnego używanego do jej wdrożenia. Dzięki temu plik wykonywalny Java może uruchamiać pojedynczą klasę, gdy zawiera ona główną metodę. Niestety, najmniejszym formatem binarnym uruchamianej aplikacji C# jest plik .exe. Pojedynczy projekt wykonywalny wygeneruje tylko jeden plik .exe, co oznacza, że ​​każdy projekt może mieć tylko jeden plik z metodą Main.

To, co mogę zrobić, to utworzyć metodę Main w swojej klasie i zmienić nazwę oryginału metody Main na Main2 lub coś w tym stylu, a następnie uruchom projekt, aby zobaczyć wyniki. Czyli to jednak nie zadziała jak w Javie i innych językach.
komentarz 14 grudnia 2022 przez Wiciorny Ekspert (281,250 p.)

W Javie każda klasa wygeneruje plik .class, zanim zostanie skompilowana do pliku JAR lub innego formatu binarnego używanego do jej wdrożenia. 

Tak ale w procesie dalej jednej kompilacji, a napisałeś "kompilowana każda osobno, chyba że ręcznie tworzysz  kompilacje każdej klasy osobno, dalej to jest otwieranie 1 klasy -> cały czas w 1 procesie", gdyż każda główna metoda to osobne uruchomienie procesu JVM.

Ale z poziomu projektu możesz wskazać która klasa ma być uruchomieniową, nie bardzo kumam co chcesz osiągnąć bo dalej nawet jeśli masz Jave to i tak uruchomić możesz na 1 proces 1  program uruchomieniowy, i tutaj w VSC tak samo- > wskazujesz aktualnie uruchomieniową klasę nie możesz w 1 procesie uruchomić wszystkiego i tu i tu.

Jeszcze mówisz o pakowaniu, to inna rzecz my mówimy o uruchamianiu jakie chcesz uzyskać,  EXE-> to jest JAR ... więc jarke jak uruchamiasz to całą w Javie, natomiast u Ciebie będzie to standardowe single
 exe https://stackoverflow.com/questions/553143/compiling-executing-a-c-sharp-source-file-in-command-prompt
każdy single exe możesz robić jako single class  i uruchamiać jako single exe. 

Jak nie potrafisz tego w VSC, lub narzędzie tego nie udostępnia to zmień narzędzie i rób to manualnie tak jak dla Javy z plików class 

komentarz 14 grudnia 2022 przez zig Nowicjusz (160 p.)
Tyle to ja wiem, że jak mam kilka programów Program.cs, Program1.cs, Program2.cs z główną metodą Main, to muszę w pozostałych programach zakomentować komentarzem metodę Main, żeby uruchomić dany program. Twój sposób w sumie dużo nie zmienia, ponieważ muszę za każdym razem tam klikać i wybierać sobie który program będzie tym głównym.

W Javie przecież mogę uruchomić każdy program z metodą Main, byle tylko inna nazwa była programu. Zobacz sobie w Intellij jak to działa, w C# tak nie jest.
komentarz 14 grudnia 2022 przez Wiciorny Ekspert (281,250 p.)
w C# tu tez możesz uruchomić każdy program osobno jako metodę main... to że tego nie możes w VSC to nie znaczy ze w innym IDE zrobisz, w VSC javy tez nie odpalisz, mówimy o tym " co można zrobić, a co nie", a nie o tym co "pozwala ide, albo nie" bo to jest kwestia tylko IDE a nie samej specyfikacji.

W javie każda KLASA MAIN to osobny program... bo osobny proces, więc też "NAZWA JEST INNA"
Skorzystaj z innego IDE moze https://www.jetbrains.com/rider/
albo
https://www.jetbrains.com/resharper-cpp/promo/?source=google&medium=cpc&campaign=12690210912&term=visual%20c%2B%2B&content=512468795943&gclid=CjwKCAiAheacBhB8EiwAItVO2_zOt3upzH5JV40Wohij-N62IP_861BMfZLxfmbbiULVgy_9fx9YgRoCgJ0QAvD_BwE
komentarz 14 grudnia 2022 przez zig Nowicjusz (160 p.)
Dlatego ja zapytałem o vscode. Jak tworzysz projekt za pomocą dotnet new console i potem uruchamiasz dotnet run to wtedy nie skompilujesz projektu z kilkoma programami z metodą Main. Debuger działa tylko w projekcie programu utworzonym w ten sposób.

Prawdopodobnie może to działać, gdy nie tworzę projektu a pomocą dotnet. Wtedy z konsoli lub za pomocą rozszerzenia code runner, mogę tak uruchomić różne programy z osobna.

Podobne pytania

0 głosów
1 odpowiedź 147 wizyt
pytanie zadane 25 września 2020 w C# przez assassin Gaduła (3,260 p.)
0 głosów
3 odpowiedzi 1,280 wizyt
pytanie zadane 11 grudnia 2018 w PHP przez Krzysio4224 Obywatel (1,690 p.)
0 głosów
2 odpowiedzi 1,976 wizyt
pytanie zadane 30 listopada 2018 w C i C++ przez Ne3yPL Użytkownik (830 p.)

93,425 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...