問題タブ [ilgenerator]

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.

0 投票する
1 に答える
85 参照

c# - DynamicMethod を使用せずに動的に生成されたメソッドの可視性チェックをスキップする

この質問は、他の 2 つの質問と非常によく似ています: firstsecondを参照してください。ただし、これらは控えめに言ってもかなり時代遅れであり、.Net 5 で状況が変わったことを願っています。

それでは、まず問題を明確にさせてください。の基になる配列を取得しようとする簡単な例でList<int>.

これは、可視性チェックをスキップするように伝えることができるため、完全に正常に機能します (コンストラクターDynamicMethodの最後のパラメーターが削除された場合でも同様に機能します)。DynamicMethodtrue

ただし、下の例で同じことをしようとすると、FieldAccessException.

System.FieldAccessException: メソッド 'GetUnderlyingArrayClass.GetUnderlyingArray(System.Collections.Generic.List'1)' によるフィールド 'System.Collections.Generic.List'1<System.Int32>._items' へのアクセスに失敗しました。+ GetUnderlyingArrayClass.GetUnderlyingArray(リスト)

上記のコードを含む .Net フィドル リンクを次に示します。

さて、私が言及した質問の 1 つは、次の属性を指していますReflectionPermissionAttribute。ただし、ドキュメントに記載されているとおりCode Access Security is not supported or honored by the runtime.です。私が理解していることから、これは基本的に .Net Core/.Net 5が CAS をサポートしていないことを意味します。

ここで私は混乱しています。skipVisibilityパラメータをtrueorに設定しても、false実際には問題になりません。これは、コードを .Net 5 環境で実行していることが原因だと思います。ただし、CAS が .Net 5 でサポートされていない場合、プライベート フィールドを読み取ることができるのはなぜですか?

DefineType目標は明らかに、 / DefineMethodAPIを使用して動的に生成されたメソッドからプライベート フィールド/メソッドにアクセスすることです。

0 投票する
0 に答える
61 参照

c# - .NET 動的メソッドで System.Action を呼び出す

動的メソッドを構築している関数があります。この動的メソッドの一部として、生成時に既知のアクションを呼び出しています。最小限の再現可能な例として、次の C# コードを検討してください。

これを実行すると、System.InvalidProgramException が発生します。これを行う正しい方法は何ですか?