問題タブ [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 を使用したコンパイル時のソース コードの変更
CI サーバーの MSBuild タスク内で Roslyn を使用して、コンパイル前にソース コードを変更することは可能ですか? 私はVSでやりたいことをすることに成功しましたが、VSの外でそれが可能かどうか疑問に思います。現在、Workspace API と Compiler API を検討していますが、それらはそれを実現するための適切なツールのようですが、それが可能かどうかはまだわかりません。特に、MSBuild に対して行った変更を元に戻して、その作業を継続できるようにすることを懸念しています。
c# - リフレクションなしで C# ソース コードから属性を抽出する
custom attributes
異なる.CS
ファイルのソース コードから抽出したい。ファイルのリストがあります。
シナリオは、Project A
のファイルを読み取るものがあるということですProject B
。で使用されるすべての属性を抽出する必要がありますProject B
。
私の質問は、を使用せずにどうすればそれを行うことができるかということReflection
です。リフレクションはアセンブリを扱いますが、ソースコードがあります。
Roslyn を使用すると過剰になりますか?
どのようなアプローチがありますか?
使用してコンパイルする別のオプションMSBuild
がありましたが、大規模なプロジェクトでは、依存関係が大きいため実行できません。アプリケーションをビルドしてからそのアセンブリに進むのは良い方法ではないようです
どの属性がどのクラスにあったのか、そのクラスの関係の UML ダイアグラムが可能なものを教えてくれるようなものが欲しいだけです。
あなたの提案をしてください
c# - Roslyn SyntaxNodesは再利用されますか?
私はRoslynCTPを調べてきました。これは、式ツリーAPIと同様の問題を解決しますが、どちらも不変ですが、Roslynはまったく異なる方法でそれを行います。
Expression
ノードには親ノードへの参照がなく、を使用して変更されるExpressionVisitor
ため、大きな部分を再利用できます。SyntaxNode
反対側のRoslynは、その親への参照を持っているため、すべてのノードが事実上、再利用できないブロックになります。、などのメソッドはUpdate
、ReplaceNode
変更を加えるために提供されています。
これはどこで終わりますか?Document
?Project
?ISolution
?APIは(ボタンを押す代わりに)ツリーの段階的な変更を促進しますが、各段階で完全なコピーが作成されますか?
なぜ彼らはそのような選択をしたのですか?私が見逃している興味深いトリックはありますか?
c#-4.0 - メンバーの取得の動作に一貫性がないのはなぜですか?
特定のコンパイルで型のコレクションを取得しようとすると、どの方法で問題にアプローチするかについて、私は混乱してしまいました。基本的に、結果を返すように見えるメソッドは結果を返さず、逆もまた同様です。以下は、デバッグ セッションのイミディエイト ウィンドウからの出力です。ここappCompilation
で、タイプはCompilation
(natch) です。
だから私の質問はこれです: ==.GetTypeMembers()
の Symbol を呼び出すと、null になります。同じシンボルを呼び出すと、null も取得されます。それでも、呼び出すと、名前空間と型が豊富に取得されます!Kind
Namespace
.GetNamespaceMembers()
.GetMembers()
さらに奇妙なことに、このステートメントをウォッチ ウィンドウに配置すると、空でも null でもない結果が得られます。
appCompilation.GlobalNamespace.GetNamespaceMembers(), results
おそらく関連: クエリの実行が期待どおりに開始されないようですが、どのように、またはなぜそれについて心配する必要があるのか さえ正確にはわかりません...呼び出す.ToList()
と実行がトリガーされることがあります。多くのメソッドはCancellationToken
パラメーターを提供しますが、それらはすべて同期的に実行されると考えていました。また、さまざまなメソッドがまたはのいずれかGetXXX()
を返すという問題もあります。読み取り専用は、IEnumerable と同じ方法で LINQ 拡張メソッドから同じ動作を取得していないようです。ReadOnlyArray
IEnumerable
デバッグ出力の表面スキャンから判断すると、それは次のようGetTypeMembers
に見えます。多分それは物事がつまらなくなっているその翻訳にありますか?GetMembers()
.OfType<>
いずれにせよ、クエリへのアクセスと実行の不一致は非常に苦痛でした。そのため、物事が非常に非決定的であるように見える原因となっている何が欠けているのかを誰かが理解するのを手伝ってくれることを願っています.
EDIT:少し繰り返した後、シンボルツリーを介して再帰的な検索を行うだけでよいことがわかりました。そのクエリ構文は、ラムダ式よりもはるかに簡単なアプローチになる場合があります...そして、そうです-PEBKAC、それ以来イミディエイト ウィンドウは、デバッグ作業を支援する以上に妨げていたようです。
与えられたコンパイルから、3 つの名前空間の入れ子程度までのすべての型を取得する最終的な Passing クエリ サンプル (これらのケースをカバーするには、さらにテストが必要です):
これから (そして、これは他のいくつかの試みよりもはるかに優れています!)
これに(まだ完全に再帰的ではありませんが、今のところは十分です):
c# - Roslynを使用してリフレクション操作を実行する方法
Roslynを使用して、次のクラスでリフレクションスタイルの操作を実行したいと思います。
基本的に私はこれをやりたいのですが、Roslynと一緒に:
基本的に、上記のリフレクションの例で使用した基準を満たすメソッドのリストを取得したいと思います。また、RoslynでReflectionのような操作を行う方法を説明しているサイトを知っている人がいたら、遠慮なくその方向に私を向けてください。私は何時間も探していましたが、これを進めることができないようです。
前もって感謝します、
ボブ
c# - Roslynコンパイラによって生成されたアセンブリをロードする
Roslynコンパイラを使用してGreeter.dllを生成しています。DLLファイルを読み込もうとすると問題が発生します。
コードは次のとおりです。
エラーメッセージが回線assembly = Assembly.LoadFile(Path.Combine(Directory.GetCurrentDirectory(), @"Greeter.dll"));
に表示され、次のように表示されます。
Im Modul wurde einAssemblymanifesterwartet。(Ausnahme von HRESULT:0x80131018)
これは大まかに次のように解釈されます
モジュールにはアセンブリマニフェストが必要でした。
誰かが私がここで欠けているものを知っていますか?
c# - Roslynとデバッグ
Roslyn CTPはしばらく前からリリースされており、少し遊んで楽しんでいますが、まだ答えられていない明らかな質問が1つあります。Roslynがデバッグにもたらすメリットはありますか?
Visual Studioで本格的なデバッグを行ったことがある人なら誰でも、デバッグ中にラムダ式、つまりLINQを使用できないことがいかに苛立たしいことかを知っています。Roslynがサービスとしてのコンパイラであるとすると、デバッグ(ウォッチウィンドウ/イミディエイトウィンドウ)でこれらの機能をサポートすることは可能ですか?
洞察力のある人に感謝します。
編集:
具体的には、次の記事で、ラムダが現在イミディエイト/ウォッチウィンドウで使用できない理由について詳しく説明します。
Roslynがこの記事で詳しく説明している問題に具体的に取り組んでいるかどうかはわかっていますか?
c# - RoslynCTP-ファイルシステムに変更を書き込む方法
Solution.slnという空のVisualStudioソリューションを作成し、最初の行のワークスペースにロードしました。次に、プロジェクトをソリューションに追加し、ワークスペースを最新のソリューションに更新します。最新のソリューションには、プロジェクトが含まれているはずです。空のソリューションに追加した新しいもののファイルを書き出すにはどうすればよいですか?
前もって感謝します、
ボブ
c# - RoslynREPLの.configファイルへのアクセス
Roslynの使用2012年6月CTP :
探索中のコードの.configファイルをRoslynC#Interactive / REPLに提供する方法はありますか?簡単なシナリオ例は、通常app.config/web.configから取得する接続文字列に依存するコードです。
c# - Visual Studio外のC#REPL
F#にはREPL(read-eval-print loop)F#InteractiveがありC:\Program Files (x86)\Microsoft F#\v4.0\Fsi.exe
ます。
Roslynでリリースされたように、C#には独自のインタラクティブREPLがあることを理解しています。Visual Studioの外部で開くにはどうすればよいですか?どこにありcsi.exe
ますか?