草庐IT

omnisharp-roslyn

全部标签

c# - Roslyn 是编译时表达式检查的正确工具吗?

我有一个工具包,其中有许多方法经常使用Expression>作为参数。有些只能是单级(o=>o.Name),而有些可以是多级(o=>o.EmployeeData.Address.Street)。我想开发一些东西(MSBuild任务?VisualStudio插件?希望是第一个)来读取所有用户的.cs文件,如果给定的参数不是属性表达式(而是类似o=>o.Contains("foo")的东西),则会出现构建错误),或者如果在只允许单级的情况下给出了多级表达式。我尝试先查看已编译的IL代码,但由于表达式树是C#编译器的“技巧”,在IL中,我所看到的只是创建表达式实例等,而我可以检查每个if仅创

c# - 为什么 Roslyn 生成的方法代码没有空格

Roslyn生成的代码在标识符和关键字之间没有任何空格,我做错了什么?它还在方法block的末尾放置了一个分号。这是我的代码:SeparatedSyntaxListparametersList=newSeparatedSyntaxList().AddRange(newParameterSyntax[]{SyntaxFactory.Parameter(SyntaxFactory.Identifier("sender")).WithType(SyntaxFactory.ParseTypeName("object")),SyntaxFactory.Parameter(SyntaxFactor

c# - roslyn 编译器未使用 msbuild 复制到 AspnetCompileMerge 文件夹

我有一个.NETMVC项目,我正在尝试使用Jenkins进行部署。我一直让Jenkins运行msbuild,然后使用RoboCopy复制生成的文件。我想切换到只使用发布配置文件。发布配置文件在我使用VisualStudio的本地计算机上运行良好,但在Jenkins主机上使用msbuild失败。它给出的错误是ASPNETCOMPILER:errorASPRUNTIME:Couldnotfindapartofthepath'C:\ProgramFiles(x86)\Jenkins\jobs\myProject\workspace\myProject\obj\Debug\AspnetComp

c# - 替换 Roslyn 语法树中的多个节点

我正在尝试使用roslyn替换语法树中的几个节点。但它的不变性似乎妨碍了我。publicstaticstringRewrite(stringcontent){vartree=CSharpSyntaxTree.ParseText(content);varroot=tree.GetRoot();varmethods=root.DescendantNodes(node=>true).OfType().ToList();foreach(varmethodinmethods){varreturnActions=method.DescendantNodes(node=>true).OfType()

c# - 如何从头开始在 Roslyn 中创建语法节点?

我想在没有预先存在的语法节点的情况下使用RoslynAPI生成语法节点。也就是说,我不能简单地对现有对象使用WithXYZ()方法来修改它,因为不存在现有对象。例如,我想生成一个InvocationExpressionSyntax对象。假设构造函数可用,我可以做类似的事情varinvoke=newInvocationExpressionSyntax(expression,arguments);但是InvocationExpressionSyntax的构造函数似乎不公开。http://www.philjhale.com/2012/10/getting-started-with-rosly

c# - 在 Roslyn 分析器中检查表达式类型的正确方法?

我正在使用Roslyn编写代码分析器,我需要检查是否有ExpressionSyntax类型为Task或Task.到目前为止我有这个:privatestaticboolIsTask(ExpressionSyntaxexpression,SyntaxNodeAnalysisContextcontext){vartype=context.SemanticModel.GetTypeInfo(expression).Type;if(type==null)returnfalse;if(type.Equals(context.SemanticModel.Compilation.GetTypeByMe

c# - Roslyn 代码分析器——什么时候应该使用 "this."?

在使用实例成员时,我总是明确地使用我的代码,在它们前面加上this.和静态成员,在它们前面加上类型名称。Roslyn似乎不喜欢这样,并礼貌地建议您可以在代码中适本地省略this.和Type.......所以我会在哪里做这个。..(没有双关语意)publicvoidDoSomethingCool(){this.CallAwesomeMethod();CoolCucumber.DoSomethingLessAewsome();}...roslyn建议我这样做...publicvoidDoSomethingCool(){CallAwesomeMethod();DoSomethingLessA

c# - 使用 Roslyn 向 C# 类添加自定义属性

考虑文件“MyClass.cs”中的以下类usingSystem;publicclassMyClass:Entity{publiclongId{get;set;}[Required]publicstringName{get;set;}publicstringSlug{get;set;}publicDateTimeCreatedOn{get;privateset;}publicDateTimeUpdatedOn{get;privateset;}/*...*/}目前我手动创建如下所示的数据协定类:[DataContract(Namespace="http://example.com/",N

c# - 为多行 lambda 创建表达式树的 Roslyn 流畅语法

我正在编写一个基于Roslyn的自定义工具,试图根除CS0834通过在构建时将给定的多行lambda重写为表达式树。编辑:此时,我只针对匿名多行lambda。例如://WillproduceCS0834ifBartakesExpression>Foo.Bar((intx)=>{...});到Foo.Bar(Expression.Lambda>(Expression.Block(...),Expression.Parameter(typeof(int))));这样就可以正确编译了。虽然我可以弄清楚转换给定代码所需的Expression.(blah)语法,但使用Roslyn完成它完全是另一

c# - Roslyn SDK 预览中的代码格式化

在早期版本(RoslynCTP)中,我使用以下代码来格式化我生成的代码并且它运行良好:SyntaxNode.Format(FormattingOptions.GetDefaultOptions()).GetFormattedRoot()在新的Roslyn版本中它不再这样做,那么在新版本(SDK预览版)中上述代码的等价物是什么? 最佳答案 您可以像这样使用Microsoft.CodeAnalysis.Formatting.Formatter格式化SyntaxNodes(如果您有工作区):usingMicrosoft.CodeAnaly