Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
C# / Mono um Scriptsprache erweitern
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

C# / Mono um Scriptsprache erweitern

beantworten | zitieren | melden

Ich möchte ein C# Projekt um eine Scriptsprache erweitern. Die Scripte sollen beim Start geladen und ausgeführt werden. Es soll möglich sein, von C# aus bestimmte Befehle aufzurufen.

Außerdem bräuchte ich die Möglichkeit, neue Befehle zu der Scriptsprache hinzuzufügen, die dann selbst in C# programmiert sind

Es kann eine einfache Scriptsprache wie Lua sein. Welche Möglichkeiten gibt es da?

Bisher gefunden hab ich Iron python, mit F# soll so was gehen und es gibt wohl C# Script.
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Ich habe gerade S# entdeckt. Die Sprache kannte ich bisher nicht, klingt aber nach einer Möglichkeit

Eine Sache ist besonders wichtig: die Scriptsprache sollte schnell sein. Ich bin ein wenig von LuaJIT verwöhnt, aber ich weiß auch, dass da keine andere Scriptsprache auch nur in die Nähe kommt.
private Nachricht | Beiträge des Benutzers
wcseller
myCSharp.de - Member



Dabei seit:
Beiträge: 188

beantworten | zitieren | melden

Da die .NET-Runtime unter anderem auch den C# Compiler enthält, kannst Du Deine 'Scripte' auch komplett in C# schreiben. Schau Dir hierzu mal die Klasse CodeDomProvider und da insbesondere die Methode CompileAssemblyFromSource an...
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Achso, dass geht auch. Wäre eine Möglichkeit. Muss mir mal Gedanken machen. Leider hab ich derzeit nur Internet via Handy, deshalb komm ich am PC nicht wirklich weiter
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.482

beantworten | zitieren | melden

3 Sekunden in Google mit den Worten "c# script" investieren und Du wärst binnen Sekunden auf https://github.com/dotnet/roslyn/wiki/Scripting-API-Samples gestoßen.
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Bitte entschuldige, dass ich nach ".NET scripting" gesucht habe. Ich bin nicht davon ausgegangen, dass man mit C# scripten kann.

Der Link taucht da auch auf, aber so weit bin ich nicht gekommen. Ich habe halt nach einer Scriptsprache gesucht



Ich vergaß zu erwähnen dass es mit Mono laufen soll. Dieses Roslyn sieht nach .NET only aus. Oder wie kann man das in Mono installieren?

Edit: ich nehme das zurück. Habe gerade gesehen das mono-roslyn schon installiert ist




Jetzt muss ich leider nochmals nachhaken. Ich weiß nicht, wie ich das benutzen kann.

Erst mal mein System: ich habe Ubuntu 16.04 und ich habe Mono 5.0 über externe Pakete installiert. Darunter ist das Paket mono-roslyn 5.0.0.100-0xamarin4. Außerdem verwende ich Monodevelop 5.10

using Microsoft.CodeAnalysis.CSharp.Scripting; ergibt aber leider einen Fehler. Es gibt bereits CodeAnalysis nicht.

Über Pakete kann ich nichts zu dem Projekt hinzufügen, weil ich keine Internetverbindung habe und da nur in der nuget Gallery gesucht wird. In den Verweisen ist auch nichts zu finden.

Wo ist mein Fehler? Was muss ich tun, um die Scripting API nutzen zu können?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.482

beantworten | zitieren | melden

Gut gemeinter Rat, aber wenn Du anständige Hilfe willst, dann stell die Frage auch so, dass man Dir helfen kann.
Ebenso les Dir das Zeug erstmal durch, bevor Du irgendwas sinnfrei rum probierst. Das kostet Dich und potentielle Helfer nur Zeit.
Du hast mit keinem Wort erwähnt, dass Du von Mono redest.
Da Du das verschwiegen und den Link wohl nicht richtig gelesen hast, hat Dich das nun ~2h gekostet.

Und nein, Microsoft.CodeAnalysis.CSharp.Scripting; gibts in Mono (noch) nicht; steht auch nicht in den unterstützten Plattformen in meinem Link.
Mit Mono wirste nicht viel Alternativen haben, evtl. scriptcs.

PS: in diesem Forum kann man Beiträge auch editieren.
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Ja, sorry. Ich Gurke hier gerade mit einem Smartphone und 2G Bandbreite rum. Ich nahm fälschlicherweise an, dass durch meine anderen Beiträge schon bekannt wäre, dass ich Mono verwende. Werde das mal in die Signatur schreiben, damit ich das nicht dauernd wiederholen muss

Ich bin inzwischen weiter. Es gibt das Scripting. Ich musste nur die DLL suchen und als Verweis hinzufügen. Code Completion findet es zumindest schon mal. Mehr mach ich heute aber nicht mehr
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 985

beantworten | zitieren | melden

Zitat von burli70
Ich nahm fälschlicherweise an, dass durch meine anderen Beiträge schon bekannt wäre, dass ich Mono verwende.
Also ich führe nebenbei keine Statistik wer in welchen Fragen zu welcher Plattform etwas fragt um in anderen Fragen zu wissen, welche Plattform denn nun gemeint sein könnte.

Ich nahm (hoffentlich nicht fälschlicherweise) an, dass muss man auch nicht

Bei einigen würde es auch schwierig, denn die sind auf mehreren Plattformen gleichzeitig unterwegs.
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Wie sieht es denn mit der Performance von C# Scripten aus? Ist das genauso schnell wie normaler C# Code?

Und wie ist das mit der Sicherheit? Kann man von einem Script alles was man in einem normalen C# Programm auch kann (vor allem Dateizugriffe und ähnliches) oder muss das vom Host zugelassen werden? Soweit ich das bisher verstanden habe kann man mit der #r Direktive beliebige Assemblies nachladen.
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 274

beantworten | zitieren | melden

Zitat
Mono verwende. Werde das mal in die Signatur schreiben,
(offtopic) hierfür gibt es den passenderen Punkt "In welcher Entwicklungsumgebung entwickelst Du zur Zeit?" unter http://www.mycsharp.de/wbb2/usercp.php?action=profile_edit
Goalkicker.com
DNC Magazine for .NET Developers,
.NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray ;-)
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Danke, erledigt
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 241
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Zitat von burli70
Wie sieht es denn mit der Performance von C# Scripten aus? Ist das genauso schnell wie normaler C# Code?

Ja, dieser ist so schnell wie C# Code. Er wird wie der "normale" Code vor der ersten Ausführung vom JIT kompiliert, d.h. der erste Aufruf ist minimal langsamer.
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Ich poste Mal ein paar Links, die ich gefunden und für hilfreich befunden habe

Roslyn-Based DSLs vs. Standard C# Scripts

Adding C# scripting to your development arsenal – Part 1

Using Roslyn to build a simple C# interactive script engine

Ich freue mich über jeden weiteren hilfreichen Link über C# Scripting, sei es Tutorial oder Codebeispiele

Moderationshinweis von gfoidl (26.05.2017 - 21:17)

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3.1

private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Zitat
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3.1

Ich hatte das vom Handy gepostet. Von da aus ist es etwas umständlich, den Text zu formatieren
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
Du hast mit keinem Wort erwähnt, dass Du von Mono redest.
Doch, hab ich. Steht von Anfang an im Titel
Zitat von Abt
Und nein, Microsoft.CodeAnalysis.CSharp.Scripting; gibts in Mono (noch) nicht; steht auch nicht in den unterstützten Plattformen in meinem Link.
Mit Mono wirste nicht viel Alternativen haben, evtl. scriptcs.

In Mono 5.0 wird Microsoft.CodeAnalysis.CSharp.Scripting; mitgeliefert. Jedenfalls gibt es hier das Verzeichnis /usr/lib/mono/msbuild/15.0/bin/Roslyn mit einer csi.exe und den entsprechenden DLL's darin. Ich habe in meiner Solution die DLL's zu den Referenzen hinzugefügt und folgenden Code geschrieben

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Scripting;
using Microsoft.CodeAnalysis.CSharp.Scripting;

namespace csscripting
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("Hello World!");
			ScriptEngine();
		}

		private static async Task ScriptEngine()
		{
			object result = await CSharpScript.EvaluateAsync("1+2");
			Console.WriteLine(result);
		}
	}
}

Das Programm wird im Grunde ausgeführt. Monodevelop zeigt mir aber bei CSharpScript.EvaluateAsync einen Error an.
The type 'Task<>' is defined in an assemply that is not referenced. You must add a reference to assembly 'System.Threading.Tasks, Version 4.0.10.0, Culture=neutral, PublicKey Token=....'

Ich habe hier 7 System.Threading.Tasks.dll Dateien, ich weiß allerdings nicht, ob ich da eine bestimmte verwenden muss.
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Ich habe glaube ich endlich was gefunden, was das tut was ich möchte. Allerdings gibt es noch ein Problem, wenn man die Packages aktualisiert, aber das lässt sich lösen

ScriptCS Hosting Example
private Nachricht | Beiträge des Benutzers
Coffeebean
myCSharp.de - Team

Avatar #avatar-3295.gif


Dabei seit:
Beiträge: 2.206
Herkunft: Deutschland/Schweiz

beantworten | zitieren | melden

Hallo burli70,

ist https://github.com/filipw/dotnet-script was?

Gruss

Coffeebean
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

So wie ich das verstehe dient das ja nur dazu, um C# Scripte von der Kommandozeile zu starten. Ich will ja C# Scripte von einem compilierten C# Programm aus ausführen, also Script Hosting.

Ich denke, ScriptCS ist da schon das richtige. Ich muss es nur noch verstehen
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 450
Herkunft: Untermeitingen

beantworten | zitieren | melden

Hi Burli70,

kleiner Tipp von meiner Seite: ich habe das Gefühl du verennst dich gerade etwas. Du fängst gerade an 1000 Ecken an - wie ich dir schon mal geschrieben habe: Fang doch erst mal mit einer Sache an und arbeite dich schrittweise vor. Ansonsten wird dein Spiel *niemals* fertig werden, da du über die Evaluierung nicht hinauskommen wirst...

Viele Grüße
Stefan
private Nachricht | Beiträge des Benutzers
burli70
myCSharp.de - Member



Dabei seit:
Beiträge: 57

Themenstarter:

beantworten | zitieren | melden

Jain. Du hast schon Recht, dass ich mich gerade mit mehreren Sachen befasse. Aber zum einen brauche ich für den Start auch schon mehrere Sachen und zum anderen schaue ich mir einiges zwar schon mal kurz an, befasse mich damit aber noch nicht wirklich.

Ich schaue mich zB nach einer Game Engine um, obwohl der Client noch in relativ weiter Ferne ist. Intensiv befassen tu ich mich damit aber noch nicht.

Aber Scripting ist ein wesentliches Element von dem, was ich vor habe. Mein Projekt ist kein eigentliches Spiel sondern nur ein Framework für Voxel Games. Das eigentliche Spiel soll komplett gescripted werden. Deshalb ist Host Scripting ein zentrales Element und die Performance ist deshalb auch so wichtig. Mit Python wäre das nicht möglich
private Nachricht | Beiträge des Benutzers