Je travaille au développement d’une application qui reformule le code CSharp . Je fais ça avec Roslyn . Je suis confronté à un problème de splitting expressions . Classe d’échantillon class Program { static void Main(ssortingng[] args) { float floatVariable = 20; Int16 intVariable = 10; ssortingng str = “School”; Console.Write(str + floatVariable.ToSsortingng() + intVariable.ToSsortingng()); […]
J’utilise Roslyn pour modifier la syntaxe des fichiers C #. Avec CSharpSyntaxRewriter, il est très facile de rechercher et de remplacer des nœuds dans l’arbre de syntaxe. Cependant, le code généré est très moche et ne sera même pas analysé dans tous les cas, car les nœuds de syntaxe que je crée (à l’aide de […]
J’essayais un peu avec Try Roslyn quand je suis entré dans ce morceau de code: using System; using System.Linq; using System.Collections.Generic; using Microsoft.CSharp; public class C { public C() { x = 4; } public int x { get; } = 5; } Et cela m’a rendu ce code: using System; using System.Diagnostics; using System.Reflection; […]
Dans la mise en œuvre de mon parsingur, je suis dans la méthode AnalyzeSymbol : public override void Initialize(AnalysisContext context) { context.RegisterSymbolAction(AnalyzeSymbol, SymbolKind.Method); } private static void AnalyzeSymbol(SymbolAnalysisContext context) { // here I look through the syntax of the method body in order to find invocations. var methodSymbol = context.Symbol as IMethodSymbol; var location = […]
Étant donné les deux méthodes: static void M1(Person p) { if (p != null) { var p1 = p.Name; } } static void M2(Person p) { var p1 = p?.Name; } Pourquoi le code M1 IL utilise callvirt : IL_0007: brfalse.s IL_0012 IL_0009: nop IL_000a: ldarg.0 IL_000b: callvirt instance ssortingng ConsoleApplication4.Person::get_Name() et l’ call utilisation […]
J’utilise SymbolFinder pour trouver toutes les références à un certain type dans ma solution, comme ceci: ISymbol typeOfInterest = compilation.GetTypeByMetadataName( “System.Reflection.PropertyInfo”); var references = SymbolFinder.FindReferencesAsync(typeOfInterest, solution).Result; foreach (var reference in references) { // reference.Locations => symbol? } Cette partie fonctionne correctement, SymbolFinder renvoie les ReferenceLocations corrects (après inspection manuelle). En fait, je suis intéressé par […]
J’utilise DynamiMethod pour générer l’IL à l’aide de method.GetILGenerator(); Cela fonctionne bien, mais il est bien sûr très difficile à utiliser car vous ne voulez généralement pas travailler avec des niveaux bas IL dans un langage de haut niveau comme C #. Maintenant, puisqu’il y a Roslyn, je pensais pouvoir l’utiliser à la place. J’ai […]
Je bricole avec les scripts Roslyn (en utilisant le package de nuget Microsoft.CodeAnalysis.CSharp.Scripting ), et je me demande s’il est possible d’append des informations de numéro de ligne aux traces de stack pour les exceptions se produisant dans un script. Quand je lance le code C # suivant: // using Microsoft.CodeAnalysis.CSharp.Scripting; var code = @” […]
Je veux obtenir le SyntaxNode d’une ligne en fonction de l’emplacement (lineNumber). Le code ci-dessous devrait être explicite, mais laissez-moi savoir si vous avez des questions. static void Main() { ssortingng codeSnippet = @”using System; class Program { static void Main(ssortingng[] args) { Console.WriteLine(“”Hello, World!””); } }”; SyntaxTree tree = SyntaxTree.ParseCompilationUnit(codeSnippet); ssortingng[] lines = codeSnippet.Split(‘\n’); […]
J’expérimente un peu avec le Roslyn-CTP. Actuellement, j’essaie de remplacer var par le type concret. var i=1; devraient devenir: int i=1; Comprendre le type inféré est facile. Mais puisque cette partie se produit dans le modèle sémantique, je reçois un ITypeSymbol . Le remplacement se produit dans le modèle de syntaxe, j’ai donc besoin d’une […]