Articles of roslyn

Fractionnement des déclarations d’expression avec Roslyn

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()); […]

Générer une syntaxe bien formatée avec Roslyn

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 […]

Pourquoi l’IL définit-il cette valeur deux fois?

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; […]

Comment puis-je obtenir un IMethodSymbol ou le nœud de syntaxe de la déclaration de méthode à partir d’un nœud InvocationExpressionSyntax qui appelle la méthode?

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 = […]

appel à la place de callvirt dans le cas du nouveau ch? ch?

É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 […]

Obtenir le symbole pour ReferenceLocation

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 […]

Peut-on utiliser Roslyn pour générer une méthode dynamic similaire à la génération DynamicMethod IL

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 […]

Script Roslyn: informations sur le numéro de ligne pour les exceptions d’exécution

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 = @” […]

Obtenir le SyntaxNode étant donné le linumber dans un SyntaxTree

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’); […]

Obtenir TypeSyntax d’ITypeSymbol

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 […]