问题标签 [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 投票
1 回答
203 浏览

visual-studio-2010 - 尝试打开 C# 交互窗口时出错

我刚刚安装了 Roslyn CTP,但是当我尝试打开 C# 交互窗口时,我收到了一个弹出错误消息:

找不到与约束匹配的有效导出 '((exportDefinition.ContractName == "Microsoft.VisualStudio.Repl.IInteractiveWindowProvider") AndAlso (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") AndAlso "Microsoft.VisualStudio.Repl.IInteractiveWindowProvider"。 Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))',无效的导出可能已被拒绝。

我正在使用 Visual Studio 2010。我重新安装了 Roslyn CTP,它仍然无法正常工作。

0 投票
2 回答
1079 浏览

c# - 被 SyntaxNode.ReplaceNodes<>() 弄糊涂了

我正在尝试用我自己构造的 InvocationExpressionSyntax 节点替换 InvocationExpressionSyntax 节点。

到目前为止,我发现的唯一方法是使用 SyntaxNode.ReplaceNodes<>,但我很难理解它是如何工作的。

这是一个代码片段

方法的 Func<> arg 的元数据:

计算参数节点的替换节点的函数。第一个参数是原始节点。第二个参数是用替换的后代重写的同一节点。

没有其他方法可以替换我能找到的节点。即使我返回我构建的替换节点,它也只是返回原始节点。

如何简单地替换整个节点?

0 投票
1 回答
2212 浏览

c# - 使用 roslyn 获取所有类型

我想使用 Roslyn 来获取一段代码中使用的所有类型。我从以下 SyntaxWalker 开始:

但是,它不仅向我显示了使用的(部分)类型,还显示了 using 语句,而我(如您所见)试图不显示 using 语句。你能告诉我这段代码有什么问题吗?

简而言之:我只想要不包括名称空间的类型。这甚至可能吗?(System.Console 之类的东西可以,系统不行)

0 投票
1 回答
221 浏览

c# - 如何穿过 MethodSymbol 的主体?

从全局命名空间,可以遍历所有命名空间:

从每个命名空间,可以遍历它们的类:

类和方法或字段也是如此:

然而,我找不到任何方法来迭代方法的语句。我怎样才能继续遍历语义树?

0 投票
1 回答
462 浏览

c# - 如何将 ExpressionStatementSyntax 转换为 ParenthesizedExpressionSyntax(在表达式周围加上括号)

假设我在语法树中有 "".GetType()which is ExpressionStatementSyntax(或者可能是InvocationExpressionSyntax),我想把它变成("".GetType()),也就是说我想把我的 ExpressionStatementSyntax节点变成ParenthesizedExpressionSyntax节点。我该怎么做?

0 投票
1 回答
2499 浏览

c# - 动态调用上的 RuntimeBinderInternalCompilerException

将对象作为动态参数传递时,出现意外的 RuntimeBinderInternalCompilerException。

我将尝试解释该场景,因为它太复杂而无法轻松粘贴代码。我正在和 Roslyn 做一些非常奇怪的黑客行为,所以听起来很奇怪。

  1. 执行申请
  2. 监控源代码的变化
  3. 使用更改的文件/类重新编译实际上是程序集的差异
  4. 将新编译的程序集加载到原始 AppDomain
  5. 将现有对象实例作为动态传递给新的/更改的代码,因此新代码可以在现有的上下文/应用程序状态上运行。

这种动态传递应该可以工作,因为类型是兼容的:即,在我的情况下,我可以保证它具有功能匹配的方法/类型。

但是当我去执行 changed+reloaded 方法时,它接收到一个动态类型的对象,我得到了这个异常。

根据 MSDN:

此类异常与 RuntimeBinderException 的不同之处在于,RuntimeBinderException 代表通常编译器错误意义上的绑定失败,而 RuntimeBinderInternalCompilerException 代表运行时绑定器本身的故障。

谷歌对此绝对没有结果。我也不知道如何进一步调试它。有什么建议么?

(我确实做了一些沙盒测试,以确保我可以在运行时将不同的程序集加载到测试应用程序中,并将来自不同程序集的实例类型传递给接受动态参数的单个方法。所以它在那种情况下确实有效。)

0 投票
1 回答
2459 浏览

c# - 修改语法树,然后得到更新的语义模型

我正在尝试修改语法树,然后更新语义模型。这是我到目前为止所拥有的:

如果我在调用之前尝试调用semanticModel = compilation.GetSemanticModel(tree);甚至进行新的编译- 相同的异常。treeGetTypeInfo()

那么我该如何更新SemanticModel呢?(当然我可以得到修改后的源代码并从头开始做所有事情,但我想有更有效的方法)。

我敢肯定,我在这里遗漏了一些明显的东西,也许在某处创建了一个新的语法树?

0 投票
1 回答
1404 浏览

c# - 在语义模型中查找标识符

假设我有一个如下所示的源文件:

我正在使用 SyntaxRewriter 访问此文件中的所有标识符。在 VisitIdentifierName 方法中,我想在语义模型中查找标识符,以发现标识符是否引用当前类的成员。

这是我到目前为止所拥有的:

但是我找不到在语义模型中查找标识符 - 没有接受 IdentifierNameSyntax 的 SemanticModel.GetDeclaredSymbol 方法的重载。

知道我应该怎么做吗?

0 投票
2 回答
447 浏览

c# - Roslyn - 找不到 SyntaxNode.ReplaceNode()

按照本教程http://msdn.microsoft.com/en-us/vstudio/hh543922.aspx,我正在尝试使用应该在 SyntaxNode 类中的 ReplaceNode 方法。

问题是,我有这个错误:“Roslyn.Compiler.CSharp.SyntaxNode 不包含‘ReplaceNode’的定义

有任何想法吗?

0 投票
1 回答
145 浏览

c# - 访问 DocumentationComment 节点给定一个 DocumentationComment 琐事?

语法可视化屏幕截图

有一个 MethodDeclarationSyntax 节点,我正在尝试访问它的 DocumentationCommentSyntax 节点。

我可以通过这样做获得 DocumentationComment 琐事:

现在,我只需要访问树中它正下方的节点。我相信这很简单,但我找不到方法。

任何帮助将不胜感激,谢谢!