問題タブ [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.
c# - Roslyn-CTP を使用した単一の右中括弧の奇妙な解析動作
roslyn を使用してコード ジェネレーターを作成しています。とりわけ、ユーザーはメソッド本体の単一のステートメントまたはプロパティのゲッター/セッターの本体を指定できる必要があります。したがって、彼は文字列のリストを翻訳メソッドに渡します。単一の中括弧をステートメントとして渡すと、閉じ中括弧が何らかの形で飲み込まれます。
メソッド:
入力:
SyntaxList は、新しいメソッド宣言 (最後のパラメーター) で使用されます。
また、単一の右中括弧を個別に処理しようとしましたが、右中括弧が 1 つだけのステートメントを作成できませんでした。
奇妙なことに、単一の左中括弧が構文ブロックとして解析されます (正しいかどうかに関係なく) が、その構文ブロックを手動で作成することは不可能のようです。開き括弧でも閉じ括弧でもありません。
これらのステートメントのカスタム解析を追加したくありません。なぜなら、Roslyn には解析タスクがないと決めたからです。誰かがこれらの特別なステートメントを処理する方法を知っていますか? あるいは、誰かがこの問題を処理する別の方法を提案できるかもしれません。どんな助けでも感謝します。前もって感謝します。
c# - コンパイルされたコードをキャッシュして、異なる Session/hostObject に対して実行できますか?
現在、IronPython をスクリプト言語として使用して、ビジネス ユーザーがアプリケーションの大部分を構成できるようにしています。Roslyn がリリースされたら、スクリプト言語として C# を追加する可能性を評価しています。IronPython ではMicrosoft.Scripting.Hosting.CompiledCode
、コンパイルされたコードをキャッシュし、別のScriptScope
オブジェクトに対して実行するために使用します。
Sessions
最新の Rosyln CTP を見てみると、コードをコンパイルしてから別のorに対して実行する明確な方法がわかりませんhostObjects
。この機能は現時点で利用できますか? もし利用できない場合、リリース時に利用可能になりますか?
c# - CompilationUnit のメソッド Symbol の SyntaxNode を見つける方法は?
コンパイル ユニットに多数のノードを追加したので、特定のシンボルに対応する構文ノードを検索したいと思います。
そのシンボルのトークンを取得するにはどうすればよいですか?
ノート:
私の目標は、そこから各メソッドのメソッド本体を取得できるようにすることMethodSymbol
です。
c# - Roslynステートメントの作成に関する文字列エスケープの問題
Roslynコードを内部で呼び出すRoslynステートメントを構築する次のコードがありますが、文字列のエスケープに問題があります。
コードは次のとおりです。
問題は、スクリプトエンジンの実行を介してコンソールウィンドウに出力される「ステートメント」が、「Hello{0}"文字列の周りのバックスラッシュを見逃してしまうことです。ダブルエスケープを追加すると(パラメーターに\を追加すると、Roslynはコンマの欠落に関するコンパイルエラーを発生させます。
このコードを更新して、ステートメント変数に必要なものの構文的に正しいバージョンを取得するにはどうすればよいですか?
c# - Roslynに組み込まれている「簡略化」はありますか?
Roslynを使用して、C#コンパイラと同じコンパイル時変換を実行する組み込みの方法はありますか?たとえば、イテレータ、初期化子、ラムダ、LINQなどを基本的なC#コードに変換しますか?
c# - SyntaxRewriter.Visit* はタイプ * のすべてのノードを訪問しません
解決済み: mike z は正しかったです。再帰を続行するためにベースを適切に呼び出していませんでした。ありがとう、マイク
を実装することで、Roslyn を使用してコードの書き換えを行っていますSyntaxRewriter
。
私が遭遇している奇妙なことは、をオーバーライドするときに、ツリー内のすべてのノードをSyntaxNode.VisitInvocationExpression(InvocationExpressionSyntax)
訪問しないことです。InvocationExpressionSyntax
(どのSyntaxNode
タイプも同じだと思います)
たとえば、次の呼び出し式があるとします。
2 つの呼び出しがある場合でも、式全体のノードにアクセスするだけです。
子/ネストされた InvocationExpression ノードを解析するために再帰関数などを作成することは確かにできますが、これは一貫性がなく、不便に思えます。
ツリー全体で * タイプのすべてのノードを訪問しないのはなぜですか?
これが私のオーバーライドです:
デバッグでそのコードをステップ実行すると、InvocationExpressionNode
forの内部controller.Add(5, 6).ToString();
に子が実際にInvocationExpressionNodes
ネストされていることが確認されます。
c# - ArgumentListSyntaxからOpenParen SyntaxTokenを削除する簡単な方法は?
この InvocationExpression がGetDelegate<Func<double,double,double>>("Add")()
あるとします。ArgumentListSyntax にある Open/Close 括弧を削除するにはどうすればよいですか?
Node.ReplaceNodes<>() メソッドを理解しようとしていますが、それでも Nodes を何も置き換えない方法がわかりません。
私はこのサンプル コードをチェックしていましたが、彼は変更するためだけにノード全体をコンポーネントの断片に分解しました。これを行う簡単な方法はありませんか?私はどんな種類の Node.RemoveNode()
方法も見つけることができません。
私もこのようなことをしようとしていましたが、成功しませんでした:
明確化: この InvocationExpression を次のように変更しようとしています。
GetDelegate<Func<double,double,double>>("Add")()
に
GetDelegate<Func<double,double,double>>("Add")
私が解決しようとしている問題:
このコードから始めます。
これに変身させたい。これは単なる半疑似コードであることに注意してください。実際には、より複雑な静的ジェネリック型のものを多数実行しています。これは、わかりやすくするために単純化されています。
プロジェクト全体で見つかった呼び出しごとに、メソッド名が StoredMethods で見つかった場合は、呼び出しを StoredMethod 呼び出しに置き換えます。結果は次のようになります。
私のより大きな問題は、ネストされた/合成されたクラスとメンバーを処理する方法を理解しようとしています。再帰は複数のMemeberAccess式を処理できると思いますが、問題を分解して頭を包むのは困難です。また、私はSyntaxRewriter
各ノードを訪問するために使用しているので、そこにコンパイルユニットを持ち込む方法がわかりません
windows-8 - roslynをWindowsMetroまたはRTアプリで使用できますか?
Roslynライブラリを利用するMetroスタイル(またはARM上のWindows RT)アプリを作成できるかどうか疑問に思っていますか?
roslynライブラリはmetroで使用できる名前空間にリストされていませんが、アプリにroslyn dllを含めることはできますか?(または、メトロから利用できないAPIを使用していますか?)
c# - 外部 VS ホスト環境から VS による IWorkspace の変更を検出しますか?
Roslyn のワークスペースを使用して、Visual Studio が提供するアクティブな IWorkspace へのフックを取得する方法はありますか?
Visual Studio で ExampleProject を開くことができるようにしたいのですが、自分のアプリケーションで を介して ExampleProject を再度開きたいのですRoslyn.Services.Workspace
が、Visual Studio で生成されたファイル/コードの変更を監視するためだけです。プロジェクトをワークスペースにロードするだけの有望なテストを実行し、何らかの方法でディスクから魔法のように変更を取得することを望んでいましたが、そのような運はありませんでした。
唯一の可能性は次のとおりです。
現在読み込まれているワークスペースへの参照を Visual Studio から直接取得します。VSがプロセスの境界を越えてこれを公開するかどうか、またはその方法を見つける方法はわかりません。
プロジェクト全体を Visual Studio 拡張機能として作り直し、開いているワークスペースに自動的にアクセスできるようにします。私は今、拡張機能の構築に飛び込みたくありません。
テストに使用しているコードは次のとおりです。
c# - すべての用途に対してオートマッパー マッピングが作成されていることを確認するにはどうすればよいですか?
Automapper.Mapper.Map<T1,T2>()
を使用するたびに、対応するマッピング構成 ( AutoMapper.Mapper.CreateMap<T1,T2>()
) が Bootstrapper に存在することを確認するテストが必要です。
Roslynを使用してコンパイラとやり取りし、Map<>
メソッドのすべての使用箇所を見つけてから、それらのインスタンスを使用してマッピングを試みようとしていました。それはうまくいきますが、私はむしろ既存のものを使用したいと思います.
これは存在しますか?そうでない場合、Roslyn よりもこれを行うためのより良い方法はありますか?