Quel est le meilleur langage de script à intégrer dans une application de bureau C#?
Nous écrivons un complexe rich desktop application et de la nécessité d'offrir de la souplesse dans les formats de rapports, donc nous avons pensé que nous nous contenterons d'exposer notre modèle d'objet de script language (langue). Le temps était quand cela signifiait VBA (qui est toujours une option), mais le code managé dérivés VSTA (je pense) semble avoir flétri sur la vigne.
Ce qui est maintenant le meilleur choix pour un langage de script incorporé dans Windows .NET?
- FWIW, j'ai commencé avec l'approche de l' @GrantPeter réponse, utilisé un domaine d'application pour permettre le déchargement, géré la croix-domaine objet de renouvellement de bail, et jouait avec sandbox de sécurité de mesures. Le script compilé peut appeler des méthodes dans le programme principal, de retour dans le domaine d'application de la frontière. L'expérience peut être trouvé ici: github.com/fadden/DynamicScriptSandbox
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé CSScript avec des résultats étonnants. - Il vraiment couper vers le bas sur le fait de devoir faire les liaisons et les autres pays à faible niveau de liquide dans mes scripts applications.
Personnellement, je préfère utiliser le C# comme langage de script. L' .NET framework (et Mono, merci Matthieu Scharley) comprend en fait les compilateurs pour chacun des .NET des langues dans le cadre lui-même.
Essentiellement, il y a 2 parties pour la mise en œuvre de ce système.
Permettre à l'utilisateur de compiler le code
C'est relativement facile et peut être fait en seulement quelques lignes de code (même si vous souhaitez ajouter une boîte de dialogue d'erreur, ce qui serait probablement une douzaine de lignes de code, en fonction de l'utilisation que vous voulez qu'il soit).
Création et utilisation de classes contenues dans l'assembly compilé
C'est un peu plus difficile que la précédente étape (nécessite un tout petit peu de réflexion). Fondamentalement, vous devriez vous contenter de traiter l'assembly compilé comme un "plug-in" pour le programme. Il existe assez peu de tutoriels sur les différentes façons de créer un système de plug-in en C# (Google est votre ami).
J'ai mis en place un "rapide" de l'application pour montrer comment vous pouvez mettre en place ce système (comprend 2 utilisation de scripts!). C'est le code complet de l'application, il suffit d'en créer un nouveau et de coller le code dans le "programme.cs de fichier".
À ce point, je dois m'excuser pour le grand morceau de code que je vais coller (je n'ai pas l'intention pour que ce soit aussi grand, mais suis un peu emporté avec mes commentaires)
csscript.net
ressemble à une sorte de wrapper au cours de cette. C'est fondamentalement un bare-bones mise en œuvre. Je pense qu'une meilleure question serait "ce n'csscript.net faire pour moi, que ce n'est pas". Je ne sais pas ce csscript est en train de faire, mais ils ont certainement savoir ce que le code ci-dessus ici, ils ont (ou quelque chose de très similaire) dans leur bibliothèque.ScriptingInterface
espace de noms à portée de garder propre dans le script? J'imagine que vous êtes en recommandant une distinct assy (DLL) pour empêcher le script à partir d'un simple chargement de l'espace principal, car ils sont de la même exposée assy. Est-il possible de limiter le "script" pour que le chargement d'un espace de noms spécifique d'un assy? Cela permettrait d'éviter d'avoir un autre projet de jongler avec. Ou ce sur l'utilisation de l'internal
etprotected internal
mots-clés afin de limiter l'accès à partir de scripts?IronPython. Voici un aperçu de comment l'intégrer.
Le PowerShell moteur a été conçu pour être facilement intégré dans une application scriptable. En fait, le PowerShell CLI est juste un texte interface basée sur le moteur.
Edit: Voir https://devblogs.microsoft.com/powershell/making-applications-scriptable-via-powershell/
Boo langue.
Mon langage de script de choix serait Lua ces jours-ci. Il est petit, rapide, propre, entièrement documenté, bien pris en charge, a une grande la communauté , il est utilisé par de nombreuses grandes entreprises dans les l'industrie (Adobe, Blizzard, EA Games), ne vaut la peine d'essayer.
Pour l'utiliser avec .NET languages l' LuaInterface projet fournira tout ce que vous devez.
Pourquoi ne pas essayer C#? Mono a un nouveau grand projet particulièrement dynamique de l'évaluation de C# :
http://tirania.org/blog/archive/2008/Sep-10.html
IronRuby comme mentionné ci-dessus. Un projet intéressant pour moi en tant que programmeur C# est C# Eval soutien en Mono. Mais il n'est pas encore disponible (fera partie de Mono 2.2).
Un autre vote pour IronPython. L'incorporation, c'est simple, l'interopérabilité avec .Net classes est simple, et, eh bien, c'est Python.
Je peut suggérer S# qui je suis actuellement à entretenir. C'est un projet open source, écrit en C# et conçu pour .NET applications.
Initialement (2007-2009), il a été accueilli à http://www.codeplex.com/scriptdotnet, mais récemment, il a été déplacé vers github.
Essayer Ela. C'est un langage fonctionnel semblable à Haskell et peut être intégré en tout .Net application. Même si elle est simple mais utilisable IDE.
Je havnt essayé encore, mais c'est plutôt cool:
http://www.codeplex.com/scriptdotnet
J'ai créé un plugin pour un client, ce qui leur permet d'écrire du code C# dans les modules qui agissent comme VBA pour Office.
J'ai utilisé Lua avant; dans une application Delphi, mais il peut être incorporé dans beaucoup de choses. Il est utilisé dans Adobe Photoshop Lightroom.
J'aime script en C# elle-même. Maintenant, en 2013, il est tout à fait un bon support pour C# script, de plus en plus de bibliothèques sont en train de devenir disponible.
Mono a un grand soutien pour script de code C# , et vous pouvez l'utiliser avec .NET par juste, y compris la
Mono.CSharp.dll
dans votre application. Pour C# script de l'application que j'ai faite découvrez CShellÉgalement consulter la ScriptEngine " dans Roslyn qui est de Microsoft, mais ce n'est qu'CTP.
Que certaines personnes déjà mentionnées, CS-Script a été autour depuis un certain temps ainsi.