问题标签 [roslyn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1893 浏览

c# - Is Roslyn the right tool for a compile-time Expression checking?

I have a toolkit that has many methods often taking Expression<Func<T,TProperty>> as parameters. Some can be single-level only (o=>o.Name), while some can be multi-level (o=>o.EmployeeData.Address.Street).

I want to develop something (MSBuild Task? Visual Studio Plugin? hopefully the first) that reads all the user's .cs files, and gives build errors if the given parameter is not a property-expression (but something like o=>o.Contains("foo")), or if a multi-level expression is given where only a single-level is allowed.

I tried looking at compiled IL code first but since the expression trees are a C# compiler "trick", in IL all I see is creating expression instances and such, and while I could check each if only MemberExpressions (and the correct number of them) are created, it is not so great.

Then Roslyn came to my mind. Is it possible to write something like this with Roslyn?

0 投票
3 回答
2371 浏览

roslyn - SyntaxRewriter 和多个语句

我在 Roslyn 中使用 SyntaxRewriter 遇到了一个棘手的情况。我想重写某些类型的语句,包括局部变量声明。该解决方案要求我将相关语句转换为多个语句,如下面的简单示例所示:

变成

我见过其他使用块来完成类似事情的示例,但是当然在变量声明的情况下,声明的范围会受到影响。我想出了以下解决方案,但我对此犹豫不决。它似乎过于复杂,需要中断访问者模式:

我错过了什么?编辑语句并删除它们(通过空语句)似乎比重写多个语句更直接。

我对答案的看法:

0 投票
5 回答
4747 浏览

c# - 使用语句 Roslyn 脚本/代码排序和删除(未使用)?

使用语句 Roslyn 脚本/代码排序和删除(未使用)?我正在寻找一些可以在项目中运行并对未使用的 using 语句进行排序和删除的 .NET/Roslyn(编译器即服务)代码。我相信罗斯林有可能吗?谁能指出我可以重写的代码?

0 投票
2 回答
2119 浏览

c# - 从 cs 文件加载脚本并访问主机方法、属性等?

我只是和 Roslyn 一起玩,但不确定如何执行以下操作。

为了简单起见,假设我有一个主机程序,它有这样的方法

然后我可以有一个名为 MyScript.csx 的脚本文件,然后在脚本中的某个地方有类似的东西

然后我让主机加载文件并执行它。

如果这种事情做不到,有没有基于c#的脚本系统/引擎可以做到?这些是要求

  1. 宿主应用程序可以从文件加载脚本。
  2. 脚本文件是用 c# 编写的,因此可以使用带有语法等的 VS2010 编写
  3. 脚本文件可以访问宿主的公共方法、属性等
0 投票
1 回答
1224 浏览

.net - 如何将方法 ReturnType 与预定义类型进行比较

使用 Microsoft Roslyn 我试图确定方法返回类型是否为 void。
我的 MethodDeclarationSyntax 上有句柄,可以看到名为“ReturnType”的属性,这是一个 void 的 PredefinedType。我是否必须实际检查关键字种类?有一个更好的方法吗?

有没有推荐的方法来完成我想做的事情?

0 投票
1 回答
701 浏览

.net - 有没有办法使用 Roslyn 确定变量的潜在值?

我正在使用 Roslyn CTP,我正在尝试确定类中变量的值是否具有值。假设我正在尝试检测某人何时使用 BinaryExpressionSyntax 来确定字符串是否等于无“”。

例如:

我可以获得 BinaryExpressionSyntax 并使用语义和语法检查左侧和右侧,但我在调试器中看不到任何跟踪可能值的内容。我知道这可能会变得粗略,例如:

Roslyn CTP 是否可以确定是否已在变量上设置了潜在值?我认为这将在 StyleCOp/FxCop 规则中发挥很大作用。

0 投票
1 回答
1257 浏览

c# - C# 静态分析,变量/参数的可能值

在类似于以下每个示例的代码中,我希望能够静态分析代码以确定传递给 SpecialFunction() 的可能值列表。

我已经可以将 C# 解析为抽象语法树,并且我已经可以处理像 A 这样的情况,我想我可以跟踪值的初始分配来猜测情况 B,但是像 C 这样简单的情况似乎很快就会变得复杂。

我几乎可以肯定,我们无法在所有情况下静态求解 x,这没关系。我想知道尝试它的策略,以及识别何时无法完成的方法。如果我们需要包含类级别的字段和多线程怎么办?关闭?如果我们知道 ,X的所有可能值x的集合会有所帮助|X| < 50吗?

根据@Vladimir Perevalov 的建议,Pex 中的概念如何应用于查找目标代码点的可能值(而不是 Pex 似乎所做的是发现导致未检查(?)异常情况的代码路径和值)?

0 投票
1 回答
247 浏览

.net - 是否可以使用 Roslyn 检测无法访问的代码或其他内置编译警告

是否可以使用 Roslyn 检测无法访问的代码或其他内置编译警告?

我尝试检查语义和语法方法中的节点属性,但没有看到任何问题或警告集合。

0 投票
1 回答
286 浏览

.net - 您可以使用 Roslyn 从语义符号转换回语法树节点吗?

如果我有一个语义符号让我们说一个参数进入一个方法,我能不能回到这个符号的语法节点?

在下面的代码中,假设我在语法树中的“param”标识符上有一个句柄param = "TEST",我切换到语义模型以确定 param 的 OriginalDefinition,这将我带到string param方法声明中。我现在想换回语法树并转到原始定义节点。

我能够用我认为是黑客的东西来做到这一点var token = tree.Root.FindToken(origNode.Locations[0].SourceSpan.Start).Parent;

有一个更好的方法吗?也许类似于GetSemanticInfo()语法树的东西?

0 投票
1 回答
724 浏览

.net - Roslyn 中的可扩展格式?

我发现 Roslyn CTP 中的代码格式非常缺乏。但达斯汀坎贝尔在他的演讲中(大约 42:00 分)提到:

实际的格式化引擎也是可扩展的。那里有一个规则引擎,因此您可以添加格式规则并根据需要进行自定义操作。

但是在查看实际代码时,我发现只有在Format(SyntaxNode)内部使用internal类的扩展方法SyntaxFormatter

我的问题是:可扩展性在哪里?它是否存在于 Roslyn CTP 中?