我有一个工具包,其中有许多方法经常使用Expression>作为参数。有些只能是单级(o=>o.Name),而有些可以是多级(o=>o.EmployeeData.Address.Street)。我想开发一些东西(MSBuild任务?VisualStudio插件?希望是第一个)来读取所有用户的.cs文件,如果给定的参数不是属性表达式(而是类似o=>o.Contains("foo")的东西),则会出现构建错误),或者如果在只允许单级的情况下给出了多级表达式。我尝试先查看已编译的IL代码,但由于表达式树是C#编译器的“技巧”,在IL中,我所看到的只是创建表达式实例等,而我可以检查每个if仅创
Roslyn生成的代码在标识符和关键字之间没有任何空格,我做错了什么?它还在方法block的末尾放置了一个分号。这是我的代码:SeparatedSyntaxListparametersList=newSeparatedSyntaxList().AddRange(newParameterSyntax[]{SyntaxFactory.Parameter(SyntaxFactory.Identifier("sender")).WithType(SyntaxFactory.ParseTypeName("object")),SyntaxFactory.Parameter(SyntaxFactor
我有一个.NETMVC项目,我正在尝试使用Jenkins进行部署。我一直让Jenkins运行msbuild,然后使用RoboCopy复制生成的文件。我想切换到只使用发布配置文件。发布配置文件在我使用VisualStudio的本地计算机上运行良好,但在Jenkins主机上使用msbuild失败。它给出的错误是ASPNETCOMPILER:errorASPRUNTIME:Couldnotfindapartofthepath'C:\ProgramFiles(x86)\Jenkins\jobs\myProject\workspace\myProject\obj\Debug\AspnetComp
我正在尝试使用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()
我想在没有预先存在的语法节点的情况下使用RoslynAPI生成语法节点。也就是说,我不能简单地对现有对象使用WithXYZ()方法来修改它,因为不存在现有对象。例如,我想生成一个InvocationExpressionSyntax对象。假设构造函数可用,我可以做类似的事情varinvoke=newInvocationExpressionSyntax(expression,arguments);但是InvocationExpressionSyntax的构造函数似乎不公开。http://www.philjhale.com/2012/10/getting-started-with-rosly
我正在使用Roslyn编写代码分析器,我需要检查是否有ExpressionSyntax类型为Task或Task.到目前为止我有这个:privatestaticboolIsTask(ExpressionSyntaxexpression,SyntaxNodeAnalysisContextcontext){vartype=context.SemanticModel.GetTypeInfo(expression).Type;if(type==null)returnfalse;if(type.Equals(context.SemanticModel.Compilation.GetTypeByMe
在使用实例成员时,我总是明确地使用我的代码,在它们前面加上this.和静态成员,在它们前面加上类型名称。Roslyn似乎不喜欢这样,并礼貌地建议您可以在代码中适本地省略this.和Type.......所以我会在哪里做这个。..(没有双关语意)publicvoidDoSomethingCool(){this.CallAwesomeMethod();CoolCucumber.DoSomethingLessAewsome();}...roslyn建议我这样做...publicvoidDoSomethingCool(){CallAwesomeMethod();DoSomethingLessA
考虑文件“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
我正在编写一个基于Roslyn的自定义工具,试图根除CS0834通过在构建时将给定的多行lambda重写为表达式树。编辑:此时,我只针对匿名多行lambda。例如://WillproduceCS0834ifBartakesExpression>Foo.Bar((intx)=>{...});到Foo.Bar(Expression.Lambda>(Expression.Block(...),Expression.Parameter(typeof(int))));这样就可以正确编译了。虽然我可以弄清楚转换给定代码所需的Expression.(blah)语法,但使用Roslyn完成它完全是另一
在早期版本(RoslynCTP)中,我使用以下代码来格式化我生成的代码并且它运行良好:SyntaxNode.Format(FormattingOptions.GetDefaultOptions()).GetFormattedRoot()在新的Roslyn版本中它不再这样做,那么在新版本(SDK预览版)中上述代码的等价物是什么? 最佳答案 您可以像这样使用Microsoft.CodeAnalysis.Formatting.Formatter格式化SyntaxNodes(如果您有工作区):usingMicrosoft.CodeAnaly