kann man in C# eine Konsolenanwendung für den OSX mahen?
Hallo zusammen
Ich bin in C# VS relativ neu. Habe ein ca. 3500 Zeilen-Programm mit vielen Klassen etc. gemacht. Funktioniert alles super und ist getestet.
Ca. 80% der Consolen-App habe ich auf dem Mac programmiert, 20% auf meinem Windowsrechner. Ich bin also heterogen unterwegs. Soweit so gut.
Eine .exe kann ich problemlos erstellen. Auf Windows auch entsprechend problemlos auszuführen. Wenn ich das auf dem Mac laufen lassen möchte, mache ich:
- a) die Konsole auf
- b) navigiere zur ProgrammXY.dll
- c) gebe dotnet ProgrammXY.dll ein
und das Ding läuft. Nur!!!!!!!!!!!!..... Das möchte ich so nicht!
Ich habe aktuell den Fall, dass meine Schwester (auch Mac-Anwenderin) genau jetzt die App benötigt. Die Löst ein Problem welche sie (und das ist Zufall des Jahrhunderts) hat.
Ich möchte ihr die Consolen-App analog zu Windows auf einem USB-Stick o.ä. übergeben können, sodass sie mit einem einfachen DOPPELKLICK das Ding starten und verwenden kann. Ich möchte keine UI darum herum bauen und ich möchte nicht ins Web damit. Auch soll sie ihren Rechner nicht fit für dotnet machen müssen. Ich will die App auf der Konsole haben. Sowohl auf Mac als auch auf Windows. Genau gleich einfach.
Nun die Frage:
Kann man das überhaupt? ich finde keinerlei sinnvolle Anleitungen oder Antworten. Bei Stackoverflow werde ich angepöbelt und bei MS selber kann ich im DEV-Forum keine Fragen stellen.
Ich möchte nur wissen ob das überhaupt geht damit ich mit der Fragerei und Suche aufhören kann oder andere Wege / Technologien angehen kann.
Grüsse euch und danke schonmal.
2 Antworten
Du brauchst eine in sich geschlossene Anwendung (self-contained application). Lies dazu hier: Publish self-contained (du kannst auch den Publish-Wizard nutzen: Rechtsklick auf dein Projekt > Publish).
Voraussetzung ist, dass deine Anwendung auf .NET Core basiert.
PS:
Publish an app self-contained. A macOS 64-bit executable is created.
Wer lesen kann ist klar im Vorteil :D
Ich habe kein einziges OS von Apple, daher kann ich hier nicht direkt helfen, aber...
... es sollte doch eine Skript-API geben?
Also sowas wie die die Bash unter Linux oder Cmd oder Powershell unter Windows.
Die exe, die unter Windows vom C#-Compiler erstellt werden kann, ist ja am Ende nicht das Programm, sondern nur ein sehr einfaches Stück Code, was das eigentliche Programm (meist gleicher Name mit ".dll") sucht und anschließend die .NET-Runtime mit genau dieser Datei startet - vereinfacht ausgedrückt.
Im Detail habe ich nicht untersucht, was wirklich dahinter steckt, aber man kann so ein Programm - wie Du ja schon bemerkt hast - sehr einfach mit "dotnet x.dll" starten.
Wenn Du unter MacOS also ein direkt ausführbares Programm haben möchtest, kannst Du also prinzipiell jede Technologie nutzen, die Du möchtest, viel passiert da nicht.
Warum Microsoft sowas für den Mac nicht selber anbietet, weiß ich nicht - vielleicht hat Apple da irgendwelche Restriktionen, die Microsoft davon abhalten, sowas automatisch zu machen?
Oder Du entwickelst mit MacOS-eigenen Technologien ein kleines Programm, was genau das tut. Das könnte dann z.B. in eine Text-Datei daneben gucken und darin die Start-DLL lesen und ausführen, auf diese Weise musst Du nur wenig zusätzlich entwickeln, kannst es immer wieder benutzen und deine Schwester hat keine unnötige Komplexität über das Doppelklicken hinaus.
PS:
Oder natürlich self-contained, wie regex9 schreibt.
Ich weiß nicht, ob der Compiler dann auch eine direkt ausführbare Datei liefert, aber selbst wenn nicht, ersparst Du dir damit das Problem, erst die .NET-CLI zu suchen oder vorher bereitzustellen, hast aber den Nachteil, dass die Runtime samt Framework komplett mitgeliefert werden muss, was durchaus eine Menge sein kann.
PPS:
Publish an app self-contained. A macOS 64-bit executable is created.
Wer lesen kann ist klar im Vorteil :D
Liefert der Compiler dann auch eine auf MacOS direkt ausführbare Executable?
Self-contained meint ja nur, dass die Runtime selber mitgeliefert wird, aber nicht, wie das ausführbare Programm gestartet werden soll.
Ich hab's selber nie ausprobiert, deshalb frage ich.
Geht aber sicher auch ohne, indem man die Runtime selber irgendwo hin legt (oder mit kopiert) und z.B. ein Skript anbietet. Aber klar, wenn der Compiler das alles von selber liefert, wäre das natürlich besser.
Davon kann man meine ich ausgehen, da der Fragestellt die dotnet-CLI nutzt :)