問題タブ [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<> 引数のメタデータ:

引数ノードの置換ノードを計算する関数。最初の引数は元のノードです。2 番目の引数は、置き換えられた子孫で書き換えられた同じノードです。

私が見つけたノードを置き換える方法は他にありません。構築した代替ノードを返却しても、元のノードが返却されるだけです。

ノード全体を単純に置き換えるにはどうすればよいですか?

0 投票する
1 に答える
2212 参照

c# - roslynですべてのタイプを取得

Roslynを使用して、コードの一部で使用されるすべてのタイプを取得したいと思います。私は次のSyntaxWalkerから始めました。

ただし、使用されている(パーツ)タイプのみを表示するのではなく、usingステートメントも表示しますが、(ご覧のとおり)usingステートメントを表示しないようにしました。このコードの何が問題になっているのか教えていただけますか?

つまり、名前空間を除くタイプのみが必要です。これも可能ですか?(System.Consoleのようなものは問題ありませんが、Systemは問題ありません)

0 投票する
1 に答える
221 参照

c# - MethodSymbol の本体をウォークスルーする方法は?

グローバル名前空間から、すべての名前空間を反復処理できます。

各名前空間から、それらのクラスを反復処理できます。

クラスとメソッドまたはフィールドでも同じことが起こります。

それでも、メソッドのステートメントを反復処理する方法が見つかりませんでした。セマンティックツリーをたどり続けるにはどうすればよいですか?

0 投票する
1 に答える
462 参照

c# - ExpressionStatementSyntaxをParenthesizedExpressionSyntaxに変換する方法(式を括弧で囲みます)

構文 木に(または多分)"".GetType()あるものがあり、それをに変換したい、つまりノードをノードに変換したいと します。どうすればいいですか?ExpressionStatementSyntaxInvocationExpressionSyntax("".GetType())ExpressionStatementSyntaxParenthesizedExpressionSyntax

0 投票する
1 に答える
2499 参照

c# - 動的呼び出しでの RuntimeBinderInternalCompilerException

オブジェクトを動的引数として渡すと、予期しない RuntimeBinderInternalCompilerException が発生します。

コードを簡単に貼り付けるには複雑すぎるため、シナリオを説明しようと思います。私は Roslyn で非常に奇妙なハッカーを行っているので、奇妙に聞こえるかもしれません。

  1. アプリケーションの実行
  2. ソースコードの変更を監視する
  3. 変更されたファイル/クラスを使用して、実質的にアセンブリの差分を再コンパイルします
  4. 新しくコンパイルされたアセンブリを元の AppDomain に読み込みます
  5. 既存のオブジェクト インスタンスを動的として新しいコードまたは変更されたコードに渡し、新しいコードが既存のコンテキスト/アプリケーションの状態で動作できるようにします。

型には互換性があるため、この動的な受け渡しは機能するはずです。つまり、私の場合、機能的に一致するメソッド/型があることを保証できます。

しかし、changed+reloaded メソッドを実行しようとして、動的タイプのオブジェクトを受け取ると、この例外が発生します。

MSDN によると:

この種の例外は、RuntimeBinderException とは異なり、RuntimeBinderException は通常のコンパイラ エラーの意味でのバインドの失敗を表し、RuntimeBinderInternalCompilerException はランタイム バインダー自体の誤動作を表します。

Google には、これに関する結果はまったくありません。さらにデバッグする方法もわかりません。助言がありますか?

(実行時にさまざまなアセンブリをテスト アプリケーションにロードし、さまざまなアセンブリからインスタンス化された型を動的パラメーターを受け入れる単一のメソッドに渡すことができることを確認するために、いくつかのサンドボックス テストを行いました。したがって、そのシナリオでは機能します。)

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の雑学クイズを入手できます。

ここで、ツリーのすぐ下にあるノードにアクセスする必要があります。簡単にできると思いますが、方法がわかりません。

どんな助けでも大歓迎です、ありがとう!