Je viens de découvrir Nrefactory 5 et je devinerais que c'est la solution la plus appropriée pour mon problème actuel. À l'heure actuelle, je développe une petite application de script C # pour laquelle je voudrais fournir une achèvement du code. Jusqu'à récemment, j'ai fait cela à l'aide du projet "ROSLYN" de Microsoft. Mais comme la dernière mise à jour de ce projet nécessite .NET Framework 4.5 Je ne peux plus l'utiliser comme si j'aimerais que l'application fonctionne également sous Win XP. Je dois donc passer à une autre technologie ici.
Mon problème n'est pas la compilation. Cela peut être fait, avec quelques efforts supplémentaires, par .NET CodeDomProvider également. Le problème est le cas d'achèvement du code. Autant que je sache, NREFactory 5 fournit tout ce qui est nécessaire pour fournir une achèvement de code (analyseur, système de type, etc.), mais je ne peux tout simplement pas comprendre comment l'utiliser. J'ai examiné le code source SharpDEvelop, mais ils n'utilisent pas NREFactory 5 pour l'achèvement du code, ils ne l'utilisent que comme décompiler. Comme je ne pouvais pas trouver un exemple sur la façon de l'utiliser pour l'achèvement du code dans le net, je pensais que je pourrais trouver une aide ici. P>
La situation est la suivante. J'ai un seul fichier contenant le code de script. En réalité, ce n'est même pas un fichier, mais une chaîne que je reçois du contrôle de l'éditeur (à la manière suivante: j'utilise Avalonedit pour cela. Grand éditeur!) Et des assemblages qui doivent être référencés. Ainsi, pas de fichiers de solution, pas de fichiers de projet, etc. Une seule chaîne de code source et des assemblages. P>
J'ai parcouru la démo fournie avec Nrefactory 5 et l'article sur le projet de code et obtenu Avec quelque chose comme ça: P>
var unresolvedTypeSystem = syntaxTree.ToTypeSystem(); IProjectContent pc = new CSharpProjectContent(); // Add parsed files to the type system pc = pc.AddOrUpdateFiles(unresolvedTypeSystem); // Add referenced assemblies: pc = pc.AddAssemblyReferences(new CecilLoader().LoadAssemblyFile( System.Reflection.Assembly.GetAssembly(typeof(Object)).Location));
3 Réponses :
Nrefactory 5 est utilisé dans SharpDevelop 5. Le code source de SharpDevelop 5 est actuellement disponible dans le NEWNR BRANCHE SUR GITUB . Je jetterais un coup d'oeil à la CSHARPCOMPETITIONS Class qui a du code pour afficher une fenêtre de liste d'achèvement en utilisant des informations de CsharpCompletionEngine de Nrefactory. P>
Salut Matt. Malheureusement, SharpDEvelop 5 nécessite également .NET Framework 4.5 Donc, je ne peux donc pas explorer la solution sur ma machine. J'espère avoir mes mains sur une machine Win 8 le week-end pour creuser plus profondément dans cela. Pouvez-vous réduire les projets ou les DLL qui sont impliqués dans l'achèvement des affaires? Outre Csharpbinding B> Il semble être au moins des projets: mono.cecil b>, SharpDEvelop B>, ICSHARPCODE.SHARPDEVEL B> et < B> ICSHARPCODE.CORE B>. Est-ce correct? (#D version 5.0.0.1472) Il semble que les classes requises soient réparties sur plusieurs projets et espaces de noms. Merci!
Vous devriez pouvoir simplement utiliser les packages Nuget pour Avalonedit et Nrefactory. AvaloneDit a sa propre fenêtre de liste d'achèvement afin qu'il s'agisse simplement de capturer le texte entré puis de l'alimenter sur le moteur d'achèvement. Je vais regarder la mise en place d'un exemple.
@Mattward a jamais obtenu cet exemple ensemble? Merci!
@georgiosd - Lukas Buehler a créé un exemple - Github.com/lukebuehler/nrefactory-completion-sample - a>
Jetez un coup d'oeil à la méthode Mise à jour n ° 1: strong> p> Je viens de réussir à obtenir le travail en obtenant un résolution d'échec non résolu. P> Voici le snippet: p> update # 2: strong> p> Voici la méthode complète. Il références de cours à partir de projets de test unitaires, Sou vous auriez besoin de les référencer / les copier dans votre projet: p> } p> espère qu'il aide,
Matra p> p> icsharscode.nrefactory.cshaparp.codecompletion.Createengine code>. Vous devez créer une instance de
csharpcompletionengine code> et transmettre le document correct et les résolveurs. J'ai réussi à le faire fonctionner pour CTRL + Scénario de complément spatial. Cependant, j'ai des problèmes avec des références aux types qui sont dans d'autres espaces de noms. Il ressemble à
csharptyperesolvecontext code> ne prend pas en compte les instructions d'espace de noms - si je résolvez les références avec
csharpastasolver code>, ils sont résolus, mais je ne parviens pas à utiliser correctement ce résolveur. dans le scénario de complétion de code ...
Je viens de compiler et d'exemplaire de projet qui a terminé le code C # avec Avalonedit et Nrefactory. P>
Il peut être trouvé sur GitHub ici. P>
Vous avez simplement fait ma journée! Merci beaucoup pour ce grand travail. Il m'a fallu un peu pour le faire fonctionner. J'avais des problèmes car mon projet de test était partiellement lié à une autre version Avalonedit!
Monodevelop utilise la classe CsharpCompletionEngine. Peut-être que cela démontrera comment ça fonctionne.