问题标签 [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.
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,它仍然无法正常工作。
c# - 被 SyntaxNode.ReplaceNodes<>() 弄糊涂了
我正在尝试用我自己构造的 InvocationExpressionSyntax 节点替换 InvocationExpressionSyntax 节点。
到目前为止,我发现的唯一方法是使用 SyntaxNode.ReplaceNodes<>,但我很难理解它是如何工作的。
这是一个代码片段
方法的 Func<> arg 的元数据:
计算参数节点的替换节点的函数。第一个参数是原始节点。第二个参数是用替换的后代重写的同一节点。
没有其他方法可以替换我能找到的节点。即使我返回我构建的替换节点,它也只是返回原始节点。
如何简单地替换整个节点?
c# - 使用 roslyn 获取所有类型
我想使用 Roslyn 来获取一段代码中使用的所有类型。我从以下 SyntaxWalker 开始:
但是,它不仅向我显示了使用的(部分)类型,还显示了 using 语句,而我(如您所见)试图不显示 using 语句。你能告诉我这段代码有什么问题吗?
简而言之:我只想要不包括名称空间的类型。这甚至可能吗?(System.Console 之类的东西可以,系统不行)
c# - 如何穿过 MethodSymbol 的主体?
从全局命名空间,可以遍历所有命名空间:
从每个命名空间,可以遍历它们的类:
类和方法或字段也是如此:
然而,我找不到任何方法来迭代方法的语句。我怎样才能继续遍历语义树?
c# - 如何将 ExpressionStatementSyntax 转换为 ParenthesizedExpressionSyntax(在表达式周围加上括号)
假设我在语法树中有 "".GetType()
which is ExpressionStatementSyntax
(或者可能是InvocationExpressionSyntax
),我想把它变成("".GetType())
,也就是说我想把我的 ExpressionStatementSyntax
节点变成ParenthesizedExpressionSyntax
节点。我该怎么做?
c# - 动态调用上的 RuntimeBinderInternalCompilerException
将对象作为动态参数传递时,出现意外的 RuntimeBinderInternalCompilerException。
我将尝试解释该场景,因为它太复杂而无法轻松粘贴代码。我正在和 Roslyn 做一些非常奇怪的黑客行为,所以听起来很奇怪。
- 执行申请
- 监控源代码的变化
- 使用更改的文件/类重新编译实际上是程序集的差异
- 将新编译的程序集加载到原始 AppDomain
- 将现有对象实例作为动态传递给新的/更改的代码,因此新代码可以在现有的上下文/应用程序状态上运行。
这种动态传递应该可以工作,因为类型是兼容的:即,在我的情况下,我可以保证它具有功能匹配的方法/类型。
但是当我去执行 changed+reloaded 方法时,它接收到一个动态类型的对象,我得到了这个异常。
根据 MSDN:
此类异常与 RuntimeBinderException 的不同之处在于,RuntimeBinderException 代表通常编译器错误意义上的绑定失败,而 RuntimeBinderInternalCompilerException 代表运行时绑定器本身的故障。
谷歌对此绝对没有结果。我也不知道如何进一步调试它。有什么建议么?
(我确实做了一些沙盒测试,以确保我可以在运行时将不同的程序集加载到测试应用程序中,并将来自不同程序集的实例类型传递给接受动态参数的单个方法。所以它在那种情况下确实有效。)
c# - 修改语法树,然后得到更新的语义模型
我正在尝试修改语法树,然后更新语义模型。这是我到目前为止所拥有的:
如果我在调用之前尝试调用semanticModel = compilation.GetSemanticModel(tree);
甚至进行新的编译- 相同的异常。tree
GetTypeInfo()
那么我该如何更新SemanticModel
呢?(当然我可以得到修改后的源代码并从头开始做所有事情,但我想有更有效的方法)。
我敢肯定,我在这里遗漏了一些明显的东西,也许在某处创建了一个新的语法树?
c# - 在语义模型中查找标识符
假设我有一个如下所示的源文件:
我正在使用 SyntaxRewriter 访问此文件中的所有标识符。在 VisitIdentifierName 方法中,我想在语义模型中查找标识符,以发现标识符是否引用当前类的成员。
这是我到目前为止所拥有的:
但是我找不到在语义模型中查找标识符 - 没有接受 IdentifierNameSyntax 的 SemanticModel.GetDeclaredSymbol 方法的重载。
知道我应该怎么做吗?
c# - Roslyn - 找不到 SyntaxNode.ReplaceNode()
按照本教程http://msdn.microsoft.com/en-us/vstudio/hh543922.aspx,我正在尝试使用应该在 SyntaxNode 类中的 ReplaceNode 方法。
问题是,我有这个错误:“Roslyn.Compiler.CSharp.SyntaxNode 不包含‘ReplaceNode’的定义
有任何想法吗?
c# - 访问 DocumentationComment 节点给定一个 DocumentationComment 琐事?
有一个 MethodDeclarationSyntax 节点,我正在尝试访问它的 DocumentationCommentSyntax 节点。
我可以通过这样做获得 DocumentationComment 琐事:
现在,我只需要访问树中它正下方的节点。我相信这很简单,但我找不到方法。
任何帮助将不胜感激,谢谢!