問題タブ [cci]
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# - Microsoft CCI - コンパイラを作成するためのリソース、リファレンス
しばらく前、私はコンパイラに取り組んでいましたSystem.Reflection
.AST からコード (IL) を生成していました。今、私は取り組みたい別のコンパイラのアイデアを持っています (これは別のペット プロジェクトであり、少なくとも現在は製品コードで使用されるものではありません)。
ご存知のように、ペット プロジェクトには、実稼働コードよりも大きな利点が 1 つあります。それは、実験して失敗できることです。そこで、 Microsoft の CCIを使用してコンパイラを作成することにしました。
私が見つけた唯一の良い参考資料は、基本言語のサンプル コンパイラ (これは CCI on codeplex の一部です) ですが、チュートリアル、本、記事など、入手できる他のリソースがあればいいのにと思います。コードを勉強すること以外のより多くの情報 (何かを学ぶための最良の方法であるとは限りません。解決策が表示されますが、どのような代替手段があるか、またはそのようなコードが機能する理由はわかりません)。
では、コンパイラの作成と AST の処理に関して、CCI に関するリソース (チュートリアル、書籍) はありますか?
.net - Mono Cecil vs. PostSharp Core vs. AOP フレームワークを実装するための Microsoft CCI
カスタム AOP フレームワークを実装する機能、使いやすさ、ドキュメント、サンプル、コミュニティ/サポート、VS 統合、既知の実装、長期的な実行可能性、ビルド速度の点で優れているのはどれですか?
私が知っていることから始めます(これまでPostSharpを試しただけです):
- Microsoft Common Compiler Instrastruture (CCI) : FxCop、ILMerge、Spec#、およびコード コントラクトに使用されていることを読みました。ILが変更されたときに壊れるブランチコードのオフセットを修正することさえしないので、それは非常に低レベルのようです。
- PostSharpは 5 歳で、AOP のための多くの機能を備えています (たとえば、IL を使用して手動で行う必要があるいくつかのことを抽象化します)。にはドキュメントがありますが、改善される可能性があります。ビルドには約 2 倍の時間がかかります。IL を注入する方法に関するサンプルはほとんどなく、バージョン 2.0 はすぐにリリースされ、大幅な改善が約束されています。
- Mono Cecil : Mono スイートの一部であり、Mono Cecil を使用する Reflexil と呼ばれる Reflector 用のプラグインがあります。
.net - Microsoft CCI ベースの難読化ツール
Microsoft CCI ライブラリに基づいて .NET 難読化ツールを作成したいと考えています。Mono.Cecil で書かれた難読化ツールをいくつか見つけましたが、CCI ベースのものはありません。このタスクで CCI に潜在的な問題はありますか?
前もって感謝します。
c# - Common Compiler Infrastructure: ICustomAttribute の使用方法
一連のアセンブリを反復処理し、型とそのメタデータを検出してからコードを生成することにより、CCI-Metadata を使用してコード ジェネレーターを作成しようとしています。カスタム属性を元の型のメタデータに追加することで、コード生成を制御できるようにしたいと考えています。
何かのようなもの:
INamedTypeDefinition があり、Attributes プロパティから IEnumerable を取得します。ここから、カスタム属性の値とそのプロパティを取得するために何をすべきかわかりません。
誰かが私にコード サンプルを与えることができます: ICustomAttribute を指定して、例の属性から値を取得する方法。その定義が次のとおりであると仮定します。
どんな助けでも大歓迎です。これを他のインターフェイスにキャストして、魔法のようなことをすると思います。しかし、それを使って何かをするヘルパーを見つけることができず、実装/モデルの階層を完全に理解していません。
reflection - Reflections (または Microsoft.Cci) による CollectionBase の型の決定
質問: Reflection または Microsoft.Cci を使用して、
から派生した型に含まれる型を確実に判別する静的な方法はありますか?CollectionBase
背景:
私は、型をコピーし、それらの型のカスタマイズされたバージョンを作成し、それらの間のコンバーターを作成するコード ジェネレーターに取り組んでいます。Microsoft.Cci を介してソース アセンブリ内の型を調べます。テキスト テンプレートを使用してソース コードを出力します。多くの変換とカスタマイズを行い、私が気にしないコードを放り出します。
結果のコードでは、 、、または以前に使用されList<T>
たすべての場所を置き換えるつもりです。追加の作業なしでシリアル化できると確信しているため 、使用したいと思います。これは、アプリケーションにとって重要です。あらゆる場合において具体的です。カスタム実装をコピーする必要があるため、クラスをコピーしないようにしています。コード ジェネレーターでそれを行う必要はありません。CollectionBase
IEnumerable<T>
T[]
List<T>
T
CollectionBase
私が問題を抱えている唯一の部分は、カスタムを交換するときの決定T
です。List<T>
CollectionBase
これまでに行ったこと:
MSDN のドキュメントと のサンプルを簡単に調べたところ、派生型でCollectionBase
カスタム メソッドを作成することが言及されています。Add
これは決して強制されているとは思わないので、それに頼ることができるかどうかはわかりません. 実装者は別の名前を付けたり、さらに悪いことに、Object
唯一の共通の祖先として複数の型をサポートするコレクションを持っている可能性があります。
私が検討した代替案:
おそらく、デフォルトのシリアライゼーションは、私が利用できるいくつかのトリックを行います。コレクションのデフォルトのシリアライゼーションはありますCollectionBase
か、それとも通常は自分で実装する必要がありますか? 自分でやらなければならない場合、型を判断するために調べることができる信頼できるメタデータはありますか? デフォルトのシリアル化をサポートしている場合、コレクション内のアイテムのランタイム タイプに依存していますか?
コード ジェネレーターでCollectionBase
、対応するT
forにマップされた既知の型のマッピングを作成できList<T>
ます。見つかった特定のCollectionBase
型がリストにない場合は、例外をスローします。信頼できる代替手段がない場合は、おそらくこれを使用します。
windows-phone-7 - CCI または Mono.Cecil を使用して、新しい Windows Phone 7 アセンブリをゼロから作成するにはどうすればよいですか?
WP7 のアセンブリを生成するツールに取り組んでいます。私は完全なフレームワークからこれを行っています。Reflection.Emit は WP7 では機能しませんが、CCI または Mono.Cecil は機能するため、新しいアセンブリを最初から作成する方法があるかどうか疑問に思っています。既存のアセンブリを変更できることは既に知っていますが、アセンブリを作成できると非常に便利です。回避策は、Visual Studio で空のアセンブリを生成し、それをテンプレートとして保持することだと思いますが、もっと良い方法があるはずだと思います。
c# - CCI 対 Mono.Cecil -- 長所と短所
これら 2 つの類似したフレームワークについて議論している記事を見たことがありますが、それらのほとんどは 2 年ほど前のものです。どちらのプロジェクトも 2 年前よりもはるかに成熟しており、状況はより複雑になっていると思います。
したがって、各ライブラリの現在の状態を考えると、誰かがそれぞれの長所と短所の詳細な説明を提供できることを望んでいました。
.net - Common Intermediate Language (CIL) からのコード分析
.NET コード (.dll、.exe、および C# コードの組み合わせ) に対してかなり基本的なプログラム分析を行いたいと考えています。Microsoft のCommon Compiler Infrastructureを使用して、最初にコードを IL 形式に変換し、これを使用してコール グラフを作成しました。コール グラフを取得したら、コードの複雑さ、ボトルネック、メモリ フットプリントなどを特定するための洞察を得るために活用できる標準ツールはありますか? どんなポインタでも本当に感謝しています!
static-analysis - ASM for JavaバイトコードのようなCIL静的分析ライブラリはありますか?
CILコードでカスタム静的コード分析を行うためのライブラリを探しています。読む:ここに示されているような静的分析をすでに実行しているツールには興味がありません。
Javaバイトコードを使用したカスタム分析には、ASMを使用しましたが、ASMが提供する機能と優れたドキュメントが気に入っています。「CIL静的分析ライブラリ」をグーグルですばやく検索しても、ASMの機能を提供しているように見えるものは何も見つかりません。
code-analysis - カスタム コード分析ルールを VS2012 に移行する
私は何十ものカスタム コード分析ルールを作成しました。ルールは、Visual Studio 2010 を対象として開発されました。必要に応じて、アセンブリには FxCopSdk、Microsoft.Cci、および Microsoft.VisualStudio.CodeAnalysis のバージョン 10.0 への参照が含まれています。これらは Visual Studio 2010 で正しく実行され、TFS 2010 で正しくビルドされます。
Visual Studio 2012 に移行したいのですが、VS 2012 を使用して既存のソリューションでカスタム ルールを実行すると、CA0062 エラーが発生します。根本的な原因は、カスタム ルール アセンブリをロードする CA0053 エラーです。これらの 3 つのアセンブリへの参照は、Visual Studio 2012 のバージョン 11 に更新する必要があることを理解しています。これは、構成ファイルでバージョン リダイレクトを使用して行うことができます。Visual Studio 2012 IDE および FxCopCmd バイナリをリダイレクトすることでローカルで動作させることができますが、コードを TFS 2010 にチェックインするときに問題が発生します。
私たちが検討した明らかな解決策は 2 つありますが、どちらもあまり好ましいものではありません。1 つ目は、各開発者がローカルでリダイレクトすることを要求し、TFS ビルド エージェントもリダイレクトするように変更することです。2 つ目は、カスタム コード分析ルールの 2 つの分岐を維持することです。1 つはバージョン 10 (VS2010) を対象とし、もう 1 つはバージョン 11 (VS2012) を対象としています。
これを行うためのより良い方法はありますか?それとも、全員を TFS 2012 と Visual Studio 2012 に同時にアップグレードする必要がありますか?