問題タブ [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はSyntaxTreeの構築に疑問を抱いています
免責事項
明らかな何かが欠けていることは確かですが、公式のドキュメントを読んだ後でも、Roslynが構文ツリーを作成する方法を明確に理解していません。
例
次の単純なコードについて考えてみます。
私SyntaxTree
はこのコードのためにを取得し、このようなものを非常にラフでシンプルに作成しますが、理解する必要があります。
そして、それはかなりうまく機能します。
問題
ただし、 ReadFromUsb()
メソッドにコメントを追加するだけで、次のようになります。
そしてChildNodes()
、{1}マークの付いた行を呼び出します。CLASS(???)は0を返します。
質問
メンバー関数にコメントを追加すると、親のCLASS子の構文ノードのコレクションがリセットされるのはなぜですか?
私は何が欠けていますか?
c# - C#の「偽の」linq理解構文キーワードに利用可能なオプション?
メソッド チェーンを使用して何かを記述するケースはいくつかありますが (特に、foo.Where(..).ToArray() のような 1 つまたは 2 つのメソッドの場合)、多くの場合、LINQ クエリ内包構文を好みます。代わりに(仕様の「クエリ式」)、次のようになります。
それらのかなり大きなチャンクでは、結果の IEnumerable を取り、それをデータ構造 (配列、リストなど) に熱心にロードする必要があります。これは通常、次のいずれかを意味します。
var queryResult = query.ToArray(); のような別のローカル変数を追加します。また
クエリを括弧で囲み、ToArray (または ToList など) にタグ付けします。
他の人がどのオプションを使用しているか、または 2) いくつかの追加の「コンテキスト キーワード」を追加することが実行可能であると考えることができるオプションを見つけようとしています。あたかもLINQキーワードが「ネイティブに」拡張可能であるかのように:)
おそらく、これはある種の前処理 (C# のこの領域に何があるかはわかりません) か、Nemerleのようなものに使用されるコンパイラーの変更(オプションになると思いますが、確かではありませんか? )。私は Roslyn が何をサポートするか、またはサポートするかについてまだ十分に知らないので、誰かがこのように C# を「拡張」できるかどうかを知っている人がいたら、声をかけてください!
私が最も使用する可能性が高いもの(他にもたくさんあると確信していますが、アイデアを理解するため/私が望んでいること):
ascount - Count() に変換
これは、次のように「変換」されます (最終結果がそうである限り、パスが何であるかは関係ありません)。
同様に:
- asarray - ToArray() に変換します
- aslist - ToList() に変換
(明らかに、First()、Single()、Any() などを続けることもできますが、質問の範囲を抑えるようにしてください:)
パラメーターを渡す必要のない拡張メソッドにのみ関心があります。私は、(たとえば) ToDictionary や ToLookup でこの種のことをしようとしているわけではありません。:)
つまり、要約すると:
- 「ascount」、「aslist」、および「asarray」をlinqクエリ式に追加したい
- これがすでに解決されているかどうかはわかりません
- Nemerleがこれに適しているかどうかはわかりません
- Roslyn の話がこの種の使用をサポートするかどうかはわかりません
roslyn - Roslyn を使用する利点は何ですか - サービスとしてのコンパイラ
Roslyn プロジェクトの CaaS (Compiler As A Service) とは何ですか?
Roslyn 機能を使用すると、現在の C# 4.0 コンパイラよりも C# アプリケーションのパフォーマンスがどのように向上しますか?
Roslyn-CTP の既知の制限/問題は何ですか?
ef-code-first - Roslyn を使用して EF CodeFirst DbContext を作成する
私が遊んでいるちょっとしたアイデアですが、それが実行可能かどうか、または多くの用途があるかどうかはわかりません。
Roslyn CTP を使用して、非常に基本的な EF Code First データベースを生成しようとしています。
コード:
実行すると、次の例外が発生します
例外:
タイプ 'Submission#0+Car' はマッピングされませんでした。Ignore メソッドまたは NotMappedAttribute データ注釈を使用して、型が明示的に除外されていないことを確認してください。型がクラスとして定義されていること、プリミティブ、ネスト、またはジェネリックではないこと、および EntityObject から継承されていないことを確認してください。
考えられる問題のリストを調べたところ、Roslyn がコード生成の一部としてネストされたクラスを作成していると推測されます。これは、それ以外の場合は意味があります。呼び出しは、何らかのクラス/メソッドにラップする必要があります。上記を確認するアセンブリを出力できますが、正しく記述する方法についての手がかりはおそらくないでしょう。
私も Syntax.ClassDeclaration の道をたどりましたが、1 つのプロパティを持つクラスを作成するためだけに数百行のコードを作成することになり、そのクラスをインスタンス化する明確な方法はありませんでした。
質問
パブリックにアクセスできる (たとえば、別のクラスにネストされていない) Roslyn でクラスを作成する簡単な方法はありますか?
c# - .exe を .vsix にパッケージ化し、Visual Studio 拡張機能から呼び出す
外部プロセスを開始し(を使用System.Diagnostics.Process
)、標準入出力を介して通信することで、一部の作業を行うVisual Studioパッケージがあります。.exe
現在、拡張機能を実際に展開するには明らかに機能しないハードコードへのパスがあります。.exe
拡張機能を使用して をパッケージ化して配布する正しい方法は何ですか? (そして、関連して、インストールしたファイルへのパスをプログラムでどのように見つけるのですか。)できれば、インストールが簡単.exe
になるようにファイルに入れたいと思います。.vsix
編集:コードの関連部分を BitBucket に配置しました (Roslyn を使用している他の人にとっては役立つかもしれません): roslyn_processは、私がやろうとしていることをよりよく理解するためです。AbstractProcessHandler
このコードは、 の実装を使用する Visual Studio 拡張機能と、 を使用する別のプロセスとの間の通信をセットアップしRoslynProcess
ます。後者は、Visual Studio のコード ファイルへの変更と、どのコード ファイルが表示されているかを常に通知されるため、Visual Studio の拡張機能として実行されていなくても、最新の情報を使用して分析を行うことができます。編集中のすべてのコードの Roslyn。
EDIT 2: this answerを使用して、拡張機能のディレクトリを取得できます。source.extension.vsixmanifest
タイプ「カスタム拡張タイプ」としてコンテンツリストに追加することにより、別のパッケージを含めることができます。次に、.exe
拡張機能のディレクトリに表示されます。これはおそらく正しい解決策のようですが、ディレクトリを取得する方法は MSDN で使用すべきではないものとしてラベル付けされています。
ハックのように見えますが、これがこれを行うための最良の方法のようです。その場合、すべてが機能するようになったら、これを回答として投稿します。
c# - Roslyn を使用して C# クラスにカスタム属性を追加する
ファイル「MyClass.cs」内の次のクラスを検討してください
現在、次のようなデータ コントラクト クラスを手動で作成しています。
Roslyn を使用して "MyClass.cs" を書き直して、私が手動で作成したクラスのように見えるようにしたいと思います。現在、私は以下を持っています:
DataMember および DataContract カスタム属性を MyClass に追加する方法を見つけようとしましたが、成功しませんでした。カスタム属性を追加するにはどうすればよいですか?
c# - メソッドの宣言型を見つける
MethodDeclarationSyntaxオブジェクトが与えられた場合、メソッドの宣言型をどのように見つけることができますか?
私の実際の問題は、参照されるメソッドがインターフェースメソッドを実装しているかどうかを把握する必要があることです。
たとえば、次のコードを考えると、Dispose()メソッドのMethodDeclarationSyntaxがある場合、IDisposable.Dispose()の実装であるとどのように結論付けることができますか?
メソッドの宣言型を取得しようとしました(そして型をチェックしました)が成功しませんでした(ParentプロパティはInterfaceImplementationクラスを返します)。
また、メソッドのセマンティックシンボルを取得しようとしました。
しかし、私を助けることができるものを見つけることができませんでした。
アイデア?
visual-studio - Roslyn Syntax Visualizer Extensionを機能させる方法は?
Roslynをインストールすると、いくつかの優れたデモツールが付属します。まず、構文ツリーをより完全に学びたい人にとって最も価値があると思うのは、アクティブな*.csファイルの構文ツリーを表示するSyntaxVisualizerToolWindowです。
この拡張機能を起動してVisualStudioのテストインスタンスで試したところ、すべて正常に機能しました。しかし、この拡張機能をインストールすると、機能しなくなります。[表示]->[その他のウィンドウ]->[Roslyn構文ビジュアライザー]がまだありますが、空のウィンドウツールがポップアップします。
誰かが同じ問題を抱えていて、解決策を知っていますか?
再構築時にこの拡張機能が生成するDLLファイルをコピーする必要があるかもしれませんが、どこに置くべきかわかりません。
後で、別の興味深い詳細を見つけました。独自の拡張機能を起動すると、SyntaxVisualizerToolが機能します。そのため、VisualStudioのテストインスタンスでのみ機能します。どうしてそんなはずなの?
roslyn - roslyn が提供できるコードの最適化
Roslyn の構文とセマンティック API を使い始めました。まだ深く掘り下げていませんが、次のようなセマンティック API によって提供されるコードの最適化はありますか。
デッドコードの除去、巻き上げ、またはある種のポインター分析? または他の分析?
roslyn が DFA と CFA のメソッドを提供していることは承知していますが、それに対するボーナスはありますか?
c# - LINQクエリを文字列に変換し、リモートサーバーに送信して、Roslynを使用して式に解析しますか?
次のようなデータソースがありますIDataSource : IEnumerable<IDynamicObject>
1 つの実装では純粋な XML データをクエリし、別の実装では SQL データベースをクエリしています。
私のデータソースには具象型がなく、単純なスキーマ型に対してのみ機能しています。
一部のシナリオでは、これらのデータソースは同じランタイム コンテキストでインスタンス化され、他のシナリオではネットワーク経由でアクセスされます。
LINQ を使用してデータソースをクエリすることはできませんでした。動的オブジェクトを使用して、実際のクエリの一部であるメンバー値のみを抽出および解析することを計画しています。
これは、同じランタイム コンテキストで実行している場合は問題なく動作しますが、データ ソースがリモート サーバー上の Web サービスの背後にある場合、これは失敗します。
そこで、LINQ クエリを文字列としてフォーマットし、これをサーバーに送信し、それを解析して式に戻し、新しいコンテキストで実行する方法を探していました。
私が見つけた式を解析する 2 つの方法は、Dynamic LINQとFLEEでした。私はそれらを簡単に見ただけですが、式を文字列にフォーマットして解析できるものはないようでしたか?
私はRoslynプロジェクトについて読んだことがありますが、この問題に使用できるのではないかと考えていましたか? それについて詳しく知っている人はいますか?
私もいくつか見ましたIQueryable<TData>
が、それについて多くの否定的なことを読んだので、多分それを避けるべきです. また、データ サーバーに具体的な型が必要ないため、強く型付けされているため、私のニーズには合いません。また、強く型付けされているため、これを Web サービスでどのように使用できるかわかりませんか? 何か不足していますか?