草庐IT

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

c# - 如何通过添加和删除从旧根检索到的节点来创建新根?

我正在创建一个代码修复来改变这个:if(objisMyClass){varcastedObj=objasMyClass;}进入这个:varcastedObj=objasMyClass;if(castedObj!=null){}这意味着我必须做三件事:更改if语句中的条件。将转换移动到if语句的正上方。删除正文中的语句。到目前为止,我的所有尝试都使我最多无法让其中的2个东西发挥作用。我认为出现此问题是因为您基本上在同一级别上有2个语法节点。因此,对其中一个进行更改会使另一个的位置无效。或类似的东西。长话短说:我要么设法在if语句外复制变量赋值,要么设法更改条件+删除变量赋值。从来没有全部

c# - 到处查找枚举转换为字符串

我目前正试图在解决方案中的任何地方找到将特定枚举转换为字符串的地方,无论是否显式调用了ToString()。(这些被替换为使用枚举描述的转换以改进混淆。)示例:我想找到诸如stringstr="Value:"+SomeEnum.someValue;这样的代码我尝试用包含隐式转换到枚举类型并覆盖包装类中的ToString()的包装类替换枚举本身,但是当我尝试搜索ToString()覆盖的使用时,它给了我一个列表解决方案中对任何内容调用ToString()的地方(并且仅在明确调用它的地方)。搜索是在VisualStudio中使用ReSharper完成的。还有其他方法可以找到这些枚举到字符串

c# - 未找到类型或命名空间 "are you missing assembly reference"而所有引用都正确

我正在尝试使用MSBuildWorkspaceclass.我的项目中有所有程序集引用。当我在对象浏览器中打开引用时,我看到了namespace和我尝试使用的类。但是在我接下来的using语句中,使用Microsoft.CodeAnalysis.MSBuild我得到一个Thetypeornamespacename'MSBuild'doesnotexistinthenamespace'Microsoft.CodeAnalysis'(areyoumissinganassemblyreference?)但有趣的是,语法高亮器识别类型名称,这是编译器的提示这是构建日志1>c:\windows\M

c# - 如何在 CompilationUnit 中找到方法符号的 SyntaxNode?

我在一个编译单元中添加了一堆节点,现在我想查找给定符号对应的语法节点:varcompilation=Compilation.Create("HelloWorld").AddSyntaxTrees(SyntaxTree.ParseCompilationUnit(""));ISymbolsymbol=//somearbitrarysymbol,e.g.amethodwhosesyntaxnodeIhadcompilation.GlobalNamespace.GetNamespaceMembers().First();SyntaxTokentoken=???;//howdoIgettheto

c# - 在 C# 中运行 F# 代码 -(就像在 C# 中使用 Roslyn 的 C#)

有没有办法在C#中运行F#代码?我用C#编写了一个应用程序-我想为其提供执行F#、读取记录对象、从F#枚举列表的能力。目前的解决方案是什么?我知道将来可能会有一种方法可以通过更新Roslyn来做到这一点。此外,好奇目前如何在F#中运行F#代码。有没有办法轻松做到这一点? 最佳答案 目前,您必须将F#设为库,然后从C#调用它。由于F#只是.NET,因此使用F#库(大部分)就像使用任何其他C#库一样。你可能想看看FSharpX然而,对于这一部分,因为它提供了一些实用程序来简化从C#调用F#,反之亦然。如果您想从C#动态编译F#,则需要使

c# - C# 规范 7.16.2.5 中的不一致

我正在尝试在Roslyn中实现C#规范7.16.2“查询表达式转换”。但是,我在7.16.2.5“选择子句”中遇到了问题。它是这样写的Aqueryexpressionoftheformfromxineselectvistranslatedinto(e).Select(x=>v)exceptwhenvistheidentifierx,thetranslationissimply(e)Forexamplefromcincustomers.Where(c=>c.City=="London")selectcissimplytranslatedintocustomers.Where(c=>c.C

c# - Visual Studio 2015/C# 6/Roslyn 无法编译 PCL 项目中的 XML 注释

我刚刚安装了最新发布的VisualStudio2015社区版(RTM),我正在尝试获取myopensourceproject在VS2015和C#6.0下工作。我的一些.cs跨项目共享。这样我就可以构建PCL版本(功能有限)和核心库的“完整”版本。然而,出于某种原因,某些代码文件在完整项目中构建正确,但在PCL项目中构建时失败(所有内容均在C#5和VisualStudio2013下编译)。构建PCL版本时,编译器似乎无法解析XML注释中的cref。这是一个在我的机器上失败的简化代码示例:///publicclassA{//Compileerroronnextline:///.public