問題タブ [postsharp]
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# - PostSharp とデバッグの問題?
非常に単純なアスペクトを作成しましたが、デバッグ中に問題が見つかりました (コードを参照)。メソッドの exit にブレークポイントを設定すると、実際には「entry」メソッド内にヒットします。PostSharp 1.5、Visual Studio 2008 SP1
これは既知のバグですか?回避策はありますか?
c# - PostSharp: OnMethodBoundaryAspect が呼び出されない
PostSharp を使用して、CompoundAspect を ActiveRecord クラス (CastleProject から) に適用しています。コードは次のようになります。
OnMethodBoundaryAspect である CommitOnSaveSubAspect を除いて、すべて正常に動作します。Save メソッドが呼び出されたときに OnSuccess メソッドが呼び出されることはありません。コードを OnEntry と OnExit に移動しようとしましたが、ここでも同じ状況です。
CommitOnSaveSubAspect クラスは次のようになります。
アスペクトを間違った方法で適用していますか?
c# - カスタムコンパイル時警告の生成C#
VS2008を使用していて、プロパティのカスタム属性に基づいてコンパイル時の警告/エラーを作成したいと思います(可能な場合)。
現在私が興味を持っているのは2つのケースです。
MyClassがインターフェースを実装する必要がある場所。現在、属性のコンストラクターでこれを表明していますが、スタックトレースの性質上、これを追跡するのは簡単ではありません。
私が興味を持っている2番目のケースは、属性にタイプが定義されている場合です。そのタイプがインターフェースを実装している場合、別の属性が存在しない場合は警告が表示されます。
IE if(MyClass.Implements(SomeInterface)&&!Exists(SomeAttibute)){警告の生成}
ありがとう!
.net - 抽象メソッドにアスペクトを追加しますか?
PostSharp は次のエラーを返します。
PostSharp: 抽象メソッドまたは外部メソッド "..." でターゲット サイト ウィービングを使用して OnMethodInvocation アスペクト (...) を適用できません。この方法からアスペクトを除外するか、call-site weaving を使用することを検討してください。
提案されたコール サイト ウィービングは、私にとって適切な解決策ではありません。抽象メソッドの前後処理を追加する方法はありますか?
aop - アスペクト指向プログラミング: PostSharp は何に使用しますか?
AOP フレームワーク Postsharp のユーザーに尋ねたいのですが、フレームワークを具体的に何に使用していますか?
また、その使用がビルド時間に大きな悪影響を与えることは知っていますが、実行時のパフォーマンスはどうですか? ヒットは多い?
ありがとう、
S
postsharp - なぜポストコンパイラを使用するのですか?
PostSharpのようなポストコンパイラが必要になる理由を理解するために私は戦っていますか?
私の理解では、元のコードの属性にコードを挿入するだけなので、開発者はなぜそのコードを自分で記述しないのでしょうか。
メソッドの属性を使用してボイラープレートコードを乱雑にしないので、誰かが書くほうが簡単だと言う人がいると思いますが、それはDIまたはリフレクションを使用し、ポストコンパイラなしで少し先見の明を持って行うことができます。リフレクションを言ったので、パフォーマンスエレファントが入ることはわかっていますが、ほとんどのシナリオの絶対パフォーマンスが取るに足らない(サブミリ秒からミリ秒)場合、ここでは相対的なパフォーマンスは気にしません。
c# - 属性で装飾されたメソッドに配管コードを注入/生成する方法は?
キャッシングとメモ化に関するいくつかの記事と、デリゲートとジェネリックを使用して簡単に実装する方法を読んでいました。構文は非常に単純で、実装は驚くほど簡単ですが、繰り返しの性質があるため、同じ配管コードを何度も作成する代わりに、属性に基づいてコードを生成できるはずだと感じています。
デフォルトの例から始めたとしましょう:
そして、これをメモするために:
メモ化拡張メソッドの1つに一致するタグ付きメソッドが見つかったら、このコードを吐き出すコードジェネレーターを作成する方が簡単ではないかと思いました。したがって、この配管コードを記述する代わりに、属性を追加するだけで済みます。
正直なところ、これは実際のコード生成よりもプリプロセッサによって変換されるコンパイラシュガーのように見えることを私は知っていますが、私の質問は次のとおりです。
- 特定の属性を持つac#ソースファイル内のメソッドを見つけ、parametertypesとreturntypeを解析し、このフィンガープリントに一致するデリゲートを生成するための最良の方法は何だと思いますか
- 実際にコードを上書きせずに、これをビルドプロセスに統合するための最良の方法は何でしょうか。コンパイラに渡す前に、ソースファイルに対していくつかの前処理を行うことは可能ですか?
ありとあらゆるアイデアをありがとう。
更新:
Shayが提案したように、Postsharpライブラリを調べましたが、トランザクション管理、トレース、セキュリティなどのタイムクリティカルではないアプリケーションでの作業に非常に適しているようでした。
ただし、タイムクリティカルなコンテキストで使用すると、デリゲートよりもかなり遅いことがわかりました。実装ごとにフィボナッチの例を100万回繰り返すと、実行時間が80倍遅くなりました。(0.012msポストシャープvs 0.00015msデリゲート/コール)
しかし、正直なところ、私がそれを使用するつもりの文脈では、結果は完全に受け入れられます。回答ありがとうございます!
Update2:
どうやらPostsharpの作者はリリース2.0に一生懸命取り組んでおり、これにはとりわけ、生成されたコードのパフォーマンスの向上とコンパイル時間が含まれます。
c# - PostSharp:OnMethodInvocationAspectを使用すると、カスタム属性が削除されます
私はこのようないくつかの側面を持っています:
これでクラスができました。それに属性を追加します。
すべて正常に動作します。それでも今は、反射を使用してオフセットを取得したいと思います。私がする時
何も返しません。元のオフセット値(属性のプロパティ)にアクセスするにはどうすればよいですか?
architecture - AOP またはその他の自動化された手段を介して厄介なレガシー システムをリファクタリングしますか?
私は最近 PostSharp をいじっていて、数年前に直面した問題を思い出しました: クライアントの開発者が Web アプリケーションを作成しましたが、状態情報の管理方法についてあまり考えていませんでした。IIS のアプリケーション インスタンスで静的に(理由は聞かないでください) 。言うまでもなく、システムは拡張できず、深刻な欠陥があり、不安定でした。しかし、それは大規模で非常に複雑なシステムであったため、再開発のコストは法外なものでした。当時の私の要約は、コードベースをリファクタリングして、コンポーネント間の適切な分離を強制することでした。
当時、何らかの抽象化メカニズムを使用して、静的リソースへのすべての呼び出しをインターセプトし、状態データを適切に管理するコンポーネントにリダイレクトできるようにしようとしました。問題は、リダイレクトする複雑な参照が約 1000 あったことでした (そして、私にはそれを行う時間があまりありませんでした)。手動コーディング (R# を使用した場合でも) は時間がかかりすぎることが判明しました。コードベースを廃棄し、適当に書き直しました。書き直すのに1年以上かかりました。
私が今疑問に思っているのは、アセンブリ リライターやアスペクト指向プログラミング システム (PostSharp など) にアクセスできた場合、直接参照を見つけるリファクタリング プロセスを簡単に自動化し、それらをリダイレクト可能なインターフェイス参照に変換できたでしょうか。工場によって自動的に供給されます。
PostSharp または類似のシステムを使用して、病的なレガシー システムを修復した人はいますか? プロジェクトはどの程度成功しましたか? 後になって、その努力に見合うだけの価値があると思いましたか? もう一度やりますか?
更新: 詳細については、このブログ投稿を参照してください。
c# - PostSharp とキャッスル ダイナミック プロキシの違いは何ですか?
これらのライブラリの主な違いは何か、機能と機能がどのように異なるのか疑問に思っています。
Google クエリで見つけられるよりも多くの情報を期待しています...