我正在修改来自代码分析器模板的默认分析器项目,以尝试让它报告分部类的所有声明。我已将代码修改为:publicoverridevoidInitialize(AnalysisContextcontext){context.RegisterSymbolAction(AnalyzeSymbol,SymbolKind.NamedType);}privatestaticvoidAnalyzeSymbol(SymbolAnalysisContextcontext){varnamedTypeSymbol=(INamedTypeSymbol)context.Symbol;//Findjustthosen
我需要分析一些扩展方法。例如Enumerable.ToList。要分析的代码示例:vartest=@"usingSystem.Linq;namespaceTest{publicclassTestType{voidTestMethod(){varempty=new[]{0};vartest=empty.ToList();}}}";诊断:publicoverridevoidInitialize(AnalysisContextcontext){context.RegisterSyntaxNodeAction(AnalyzeSymbol,SyntaxKind.InvocationExpress
RoslynCTP已经推出一段时间了,我很喜欢试用它,但有一个明显的问题我还没有找到答案。Roslyn会给调试带来什么好处(如果有的话)?任何花时间在VisualStudio中认真调试过的人都知道在调试期间不能使用lambda表达式和LINQ是多么令人沮丧。鉴于Roslyn是一种编译器即服务,是否可以使调试(监window口/立即窗口)支持这些功能?感谢任何有见识的人。编辑:更具体地说,下面的文章详细说明了为什么lambda目前不能在即时/监window口中使用。LINQinDebuggerWindows是否知道Roslyn是否专门解决了本文详述的问题? 最
下面是我用来生成简单方法的函数-//NOTE:SF=SyntaxFactoryListparameterList=newList{SF.Parameter(SF.Identifier(sourceObjectName))};//Createmethodvarmethod=SF.MethodDeclaration(SF.ParseName(destinationClass),functionName).WithBody(SF.Block(nodes)).AddModifiers(SF.Token(SyntaxKind.PublicKeyword)).AddParameterListPar
我正在开发一个TypeScript代码生成器,它将使用C#类上的自定义属性来生成TypeScript定义和代码文件。我正在考虑两种用于TypeScript代码生成/源文件分析的选项:对编译程序集的思考罗斯林CTP该工具将使用属性和方法的自定义特性来生成TypeScript文件。现在我不打算将C#方法体转换为JavaScript,但将来可能会这样做。因此,出于这个原因,我正在认真考虑Roslyn。然而,为了简单地生成我的TypeScript类的大纲,我认为我可以使用反射和自定义属性。我在想:a)Roslyn是否提供反射无法提供的功能?我的理解是我无法通过反射获得方法体。b)RoslynC
我正在使用CSharpCompilation类来编译SyntaxTree,其中根是一个类声明。我向构造函数传递了一个包含我的using语句的CSharpCompilationOptions对象。我的理解是语法树将使用我通过的任何using语句的上下文进行编译。但是,当尝试访问在我传递给选项对象的“使用”之一中定义的类时,我收到一条错误消息,指出它在当前上下文中不存在。我显然做错了什么。有人知道传递给CSharpCompilationOptions类时使用列表的用途吗?这是代码:publicstaticvoidTestMethod(){stringsource=@"publicclass
我知道Roslyn的预发布版本实现了不可变树,如thisexcellentblogpost中所述。埃里克·利珀特着。但是,该帖子以:Thecostisthatthissystemiscomplexandcanconsumealotofmemoryifthe"red"facadesgetlarge.Weareatpresentdoingexperimentstoseeifwecanreducesomeofthecostswithoutlosingthebenefits.我想问一下发布版本的结果如何。我已经开始检查Roslynsources但是代码相当复杂,难以理解。我感兴趣的是关于上述成
VisualStudio2013的C#6预览版支持一项主要的构造函数功能,该团队已决定不会将其纳入最终版本。不幸的是,我的团队使用主构造函数实现了200多个类。我们现在正在寻找最直接的途径来迁移我们的源代码。由于这是一次性的事情,神奇的正则表达式替换字符串或hacky解析器会起作用。在我花很多时间写这样一个野兽之前,有没有人已经这样做了或者知道更好的方法? 最佳答案 正如我在评论中建议的那样,您可以使用Roslyn版本,它确实了解主构造函数,将代码解析为语法树,然后修改该语法树以使用“普通”构造函数反而。请注意,您还需要将所有使用主
几天前我在TechEd,我看到了thistalkbyKevinPilch-Bisson(releventpartstartsatabout18minutes)...我觉得这很酷,所以我决定自己和Roslyn一起玩。我正在尝试制定规则“必须声明访问修饰符”(StylecopSA1400)-意思是,这违反了规则:staticvoidMain(string[]args){}没关系:publicstaticvoidMain(string[]args){}它必须有明确的内部关键字、公共(public)关键字、私有(private)关键字或protected关键字。检测违规相当容易,但现在我正在尝
我正在使用Roslyn-CTP进行一些试验。目前我正在尝试将var替换为具体类型。vari=1;应该变成:inti=1;找出推断的类型很容易。但是由于这部分发生在语义模型中,我得到了一个ITypeSymbol。替换发生在语法模型中,因此我需要一个TypeSyntax。由于我不想要一个臃肿的名称(global::System.Int32),转换是上下文相关的(using、嵌套类型等)。作为Roslyn的一部分的VisualStudio版本已经在其“简化类型名称”quickfix中具有此功能,但查看示例我找不到进行此转换的简单方法。基于我现在使用的KevinPilch-Bisson的回答: