Tag: roslyn

使用Roslyn拆分Expression语句

我正在开发一个重新描述CSharp代码的应用程序。 我和Roslyn一起做这个。 我面临splitting expressions的问题。 样class class Program { static void Main(string[] args) { float floatVariable = 20; Int16 intVariable = 10; string str = “School”; Console.Write(str + floatVariable.ToString() + intVariable.ToString()); // Facing problem with this statement } } 我正在使用的示例代码 string code = new StreamReader(classPath).ReadToEnd(); var syntaxTree = CSharpSyntaxTree.ParseText(code); var syntaxRoot = syntaxTree.GetRoot(); //This will get […]

使用Roslyn CodeFixProvider向方法添加参数

我正在编写一个Roslyn代码分析器 ,我想识别async方法是否不采用CancellationToken然后建议添加它的代码修复: //Before Code Fix: public async Task Example(){} //After Code Fix public async Task Example(CancellationToken token){} 我已经通过检查methodDeclaration.ParameterList.Parameters来连接DiagnosticAnalyzer来正确报告Diagnostic,但是我找不到Roslyn API来将Paramater添加到CodeFixProvider的ParameterList 。 这是我到目前为止所得到的: private async Task HaveMethodTakeACancellationTokenParameter( Document document, SyntaxNode syntaxNode, CancellationToken cancellationToken) { var method = syntaxNode as MethodDeclarationSyntax; // what goes here? // what I want to do is: // method.ParameterList.Parameters.Add( new ParameterSyntax(typeof(CancellationToken)); //somehow return […]

Roslyn VisualBasic.ScriptEngine不识别在C#上编写的hostObject

我们的项目需要具备简单的业务规则,我们的客户可以在Visual Basic中编写脚本。 虽然我们的主程序是用C#编写的 客户想要执行的脚本可能是这样的(我正在考虑最简单的可能情况) var vbCode = @” If (Row.Code = 12) Then Row.MappedCode = 1 End If”; 所以我使用Code和MappedCode属性在C#中创建了一个RowData类 namespace ScriptModel { public class RowData { public int Code { get; set; } public int MappedCode { get; set; } } } 我创建了一个简单的宿主对象类 namespace ScriptModel { public class HostObjectModel { public RowData Row { get; […]

如何获取所有具有某些属性的属性?

我刚刚开始使用Roslyn,我想找到所有使用属性名称“OneToOne”注释的属性。 我启动了SyntaxVisualizer并且能够获得对该节点的引用,但我想知道是否有更简单的方法来实现这一点。 这就是我所拥有的: var prop = document.GetSyntaxRoot() .DescendantNodes() .OfType() .Where(p => p.DescendantNodes() .OfType() .Any(a => a.DescendantNodes() .OfType() .Any(i => i.DescendantTokens() .Any(dt => dt.Kind == SyntaxKind.IdentifierToken && dt.ValueText == “OneToOne”))))

将令牌和琐事映射到行号

我正在尝试使用Roslyn将令牌和琐事映射到行号。 以下是@Kevin Pilch-Bisson帮助下的最新尝试。 public class CSharpSlocAnalyser : ISlocAnalyser { public long GetSlocFor(IEnumerable files, SlocOptions options) { var tree = CSharpSyntaxTree.ParseText( @”using /* Blah */ System; // Blah public class MyClass { public void MyMethod() { var blah = “”abc””; } }”); var root = tree.GetRoot(); var walker = new CustomWalker(); walker.Visit(root); var lineMap = walker.LineMap; […]

使用AdHocWorkspace会导致“不支持语言’C#’。”

使用VS2015中的Microsoft.CodeAnalysis.CSharp.Workspaces的RC2,此代码抛出exception: var tree = CSharpSyntaxTree.ParseText(…); var workspace = new AdhocWorkspace(); var newRoot = Simplifier.Expand(tree.GetRoot(), compilation.GetSemanticModel(tree, false), workspace, n => true, true, CancellationToken.None); exception消息是“不支持语言’C#’。” 我缺少什么让这项工作?

使用Roslyn生成格式良好的语法

我正在使用Roslyn来修改C#文件的语法。 使用CSharpSyntaxRewriter,很容易在语法树中查找和替换节点。 但是,生成的代码非常难看,在所有情况下都不会解析,因为我创建的语法节点(使用SyntaxFactory)甚至缺少最少量的空白琐事。 Roslyn是否提供了一些基本的格式化function来避免这种情况,还是我必须手动添加琐事到我创建的每个节点?

如何通过扩展方法,静态类中的方法以及使用Roslyn的ref / out参数的方法来访问调用

我正在创建一个用于创建.NET UML Sequence Diagrams的开源项目,该项目利用了一个名为js-sequence-diagrams的javascript库。 我不确定Roslyn是否适合这项工作,但我认为我会试一试,所以我已经整理了一些概念代码certificate,它试图获取所有方法及其调用,然后以一种forms输出这些调用。可以通过js-sequence-diagrams来解释。 代码生成一些输出,但它不捕获所有内容。 我似乎无法通过扩展方法捕获调用,静态类中的静态方法的调用。 我确实看到带有out参数的方法调用,但没有扩展BaseMethodDeclarationSyntax任何forms 这是代码(请记住,这是概念代码的certificate,所以我没有完全遵循最佳实践,但我不是在这里请求代码审查…而且,我习惯使用任务所以我在搞乱等待,但我不完全确定我正在使用它) https://gist.github.com/SoundLogic/11193841 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection.Emit; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.MSBuild; using Microsoft.CodeAnalysis.FindSymbols; using System.Collections.Immutable; namespace Diagrams { class Program { static void Main(string[] args) { string solutionName = “Diagrams”; string solutionExtension = “.sln”; […]

MS2015中的MvcBuildViews需要很长时间

我们正在转换解决方案以使用新的Roslyn编译器。 当我在发布模式下通过teamCity构建它时,MVCBuildViews步骤仍然使用aspnet_compiler.exe,预编译视图大约需要15分钟。 在.NET 4.5上使用以前版本的aspnet_compiler.exe进行相同的过程需要3分钟 这是需要一段时间的命令: C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_compiler.exe -v temp -p E:\ path \ to \ web \ project \ Directory 我试过调整MSBuild参数,但没有改变。 这是一个已知问题,有什么解决方法,我是否需要使用Roslyn预编译视图? 如果它是一个选项,关闭MVCBuildViews步骤的缺点是什么(我相信我们选择在发布时进行预编译是导致此步骤运行的原因)。

为什么IL将此值设置两次?

当我输入这段代码时,我尝试使用Try Roslyn : using System; using System.Linq; using System.Collections.Generic; using Microsoft.CSharp; public class C { public C() { x = 4; } public int x { get; } = 5; } 它给了我这个代码: using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; [assembly: AssemblyVersion(“0.0.0.0”)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: […]