草庐IT

roslyn-code-analysis

全部标签

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

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

c# - 如何对 Entity Framework Code First 映射进行单元测试?

我正在使用CodeFirst将类映射到现有数据库。我需要一种方法来对这些映射进行单元测试,它们混合了基于约定、基于属性和流畅的API。为了进行单元测试,我需要确认类的属性映射到数据库中正确的表名和列名。此测试需要针对上下文执行,并且应首先涵盖代码的所有配置选项。在非常高的层次上,我希望断言类似(伪代码)的东西:Assert.IsTrue(context.TableFor().IsNamed("tbl_Widget"));Assert.IsTrue(context.ColumnFor(w=>w.Property).IsNamed("WidgetProperty"));

c# - 在 Visual Studio Code 中执行 T4 文本模板

我在VisualStudioCode中创建了一个T4文本模板(.tt)文件,但与VisualStudio2017(或2015,...)不同,它不会在保存后生成输出文件.tt文件。如何在VisualStudioCode中生成输出? 最佳答案 此解决方案并不完全符合您的要求,但它可能在许多情况下都有用(仅限Windows操作系统)。您可以在VisualStudioCode中创建任务并运行C:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Enterprise\Common7\IDE\TextT

c# - 为什么 EF4 Code First 在存储对象时这么慢?

我目前正在研究db4o存储在我的Web应用程序中的使用情况。我很高兴db4o工作起来如此简单。因此,当我读到CodeFirst方法时,我有点喜欢它,因为使用EF4CodeFirst的方式与使用db4o非常相似:创建您的域对象(POCO),将它们扔到db4o中,然后永不回头。但是当我进行性能比较时,EF4慢得可怕。我不知道为什么。我使用以下实体:publicclassRecipe{privateList_RecipePreparations;publicintID{get;set;}publicStringName{get;set;}publicStringDescription{get

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# - 如何更改 EF Code First 中主键的名称?

我有一个场景,我想更改实体中的主键名称并能够运行update-database-force。请参阅下面的代码和尝试时出现的错误。实体是:publicclassTeam{[Key][HiddenInput(DisplayValue=false)]publicvirtualintId{get;set;}[Display(Name="FullName:")]publicvirtualstringName{get;set;}}实体更改为:publicclassTeam{[Key][HiddenInput(DisplayValue=false)]publicvirtualintTeamId{ge

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