問題タブ [ilspy]

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 投票する
0 に答える
596 参照

.net-4.5 - ILSpy またはその他のツールを使用して、.NET フレームワークのどのコードが特定の例外メッセージを生成したかを調べるにはどうすればよいですか?

たとえば、「プリンシパル サーバーに接続しようとしているときに、このエラーが発生しました」など、標準的な英語と米国のカルチャで実行しているときに、フレームワークによって生成された特定の例外メッセージが少しあるとします。メッセージにこのテキストを含む例外を生成するフレームワークのコードを特定するにはどうすればよいですか?

フレームワーク コードは、最終的に例外をスローする前に、いくつかのレベルのヘルパー メソッドを使用して例外を生成することが多いため、スタック トレースが常に役立つとは限りません。

文字列はローカライズされていると思います。そのため、ILSpy の定数内で文字列を見つけることができません。文字列は一意のリソース ID などで保存され、その ID によって参照されると思いますが、どこから ID を見つければよいのかわかりません...

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

razor - ILSpy (別名 .NET Reflector) は、メソッドを自分自身を呼び出しているだけとして表示します。なぜですか?

匿名型を TextBox などの HtmlHelper メソッドに渡すと、RouteDataDictionary を使用してメンバーを抽出しない限り、バインド エラーが発生します (匿名型のメンバーは内部アクセスしかできないため) 。

(HtmlHelper 拡張機能) InputExtensions.TextBox メソッドが匿名型を受け入れることを確認したとき、内部で何らかの変換を行う必要があるか、同じエラーで失敗することがわかりました。

案の定、それは HtmlHelper.AnonymousObjectToHtmlAttributes メソッドを呼び出します。このメソッドのドキュメントは、問題に言及しないことで問題を軽視しようとします。代わりに、アンダースコアをダッシュ​​に置き換えて、有効な属性名が使用されるようにすることを示唆しています。もちろん。ともかく...

その変換がどのように見えるかを正確に確認したかったのですが、ILSpy でその名前の HtmlHelper の静的メソッドを調べると、メソッドは自分自身を呼び出しているように見えます。ここで何が起こっているのですか?

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

c# - IL命令をより高いレベルの.netコードに再構築する

ILSpy は cecil を独自のライブラリと共に使用してこれを実現しています。 ?

編集:私は今、ILSpyとcecilをバックボーンとして満足しています

解決策:

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

mono - アセンブリを改ざんする場合、元の指示を削除できないのはなぜですか?

SharePoint に依存するレガシ コードをテストできるようにするために、SharePoint のオブジェクトのいくつかをモックする必要があります。これを行うには、SharePoint アセンブリを改ざんし、そのメソッドをその場で自分のものに置き換えます。

これは、場合によっては機能しますが、他の場合には機能しません。私が遭遇した奇妙な状況はこれです。

SPContext.Currentのゲッターを独自の実装に置き換えたい。簡単にするために、私の実装では例外をスローするだけです。

元のアセンブリを改ざんする場合、ゲッターに対応する IL コードを置き換えるSPContext.Currentと、プロパティが使用できなくなります。これが代わりに表示されるため、ILSpy でその内容を視覚化することさえできません。

一方、元の命令の前に命令を挿入すると、getter を正常に呼び出すことができ、ILSpy でその内容を確認できます。

...挿入した指示が続きます:

...元の指示に従ってください:

新しい命令が挿入される前に元の命令が削除された場合、コードが ILSpy によって読み込まれないのはなぜですか?

ノート:

  • MethodDefinition.Body.Instructions改ざんは、コレクション (および対応するInsertandRemoveメソッド)を使用して、Mono.Cecil で行われます。

  • アセンブリの他のいくつかのメソッドとプロパティは、Microsoft.SharePoint正常に改ざんされています。ILSpy は結果の IL コードを表示します。

  • そのディレクティブが問題になる可能性があると思い.maxstackました (元のプロパティで 1、プロキシされたプロパティで 8、結果で 1)。別のプロジェクトでいくつかのテストを行った後、効果がないように見えます。

  • また、例外が原因である可能性も考えました (元のコードは新しいコードとは異なる例外をスローします)。別のプロジェクトでいくつかのテストを行った後、効果がないように見えます。

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

c# - c# 動的操作を逆コンパイルするときに表示される構文は、実際には何を意味していますか?

私は最近、同僚が離れている間に同僚のコードを逆コンパイルすることに苦労しなければなりませんでしたが、使用する必要のあるいくつかの場所を除いて、そのほとんどが驚くほどきれいに見えることがわかりました (ILSpy に感謝します) dynamic。いくつかの部分にバラバラになりました:

  1. 呼び出しサイト コンテナー - つまり、定義上はクラスに似ていますが、dynamic使用されたメソッドが であるとしましょう。DoStuffpublic /* static? I forget */ class <DoStuff>CallSiteContainer_Plus_Some_Weirdness { /* bunch of CallSite fields */ }
  2. コンテナー内のさまざまな Cal​​lSites が割り当てられているかどうかを確認し、必要に応じて使用前にそれらを割り当てる多くのコードは、実際にはまだ得られていないアプローチを使用しています。

私の質問は、最初のポイントのクラス宣言の構文に関するものです。ジェネリック クラスのように見えますが、明らかにそうではありません。そこで何が起こっているのか説明できる人はいますか?

元のコードを作成する際に助けを求めているわけではないことに注意してください。検索と置換を賢明に使用し、自動生成されたコードを他のすべてのものから切り離すことで、すでにそれを行うことができました。しかし、CallSite コンテナー構文が有効なクラス名である理由を理解したいと思います!

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

c# - 'using' ブロック コンパイラで生成されたコードが dotPeek または ILSpy で表示されない

usingを生成するコード ブロックのコンパイラ生成コードを調べたいと思っていますが、両方とも表示されtry-finallyておらず、この詳細も表示されていません。私はこのコード ブロックをよく見ていましたが、ブロックが含まれていることがわかりましたが、よく理解できません。これら 2 つのツールが役立つかどうかを確認したかったのです。dotPeekILSpyildasm.exetry-finally

何か案は?

更新: そのため、最近、プロジェクトで IDisposable を実装した構造体を使用し、usingコード ブロックと IDisposable を含む構造体がボクシングを引き起こすかどうか心配していました...しかし、後で、コンパイラがこの状況に最適化され、最適化されないことを述べた次の記事を見つけました。 Dispose を呼び出そうとすると、ボックスが表示されます。

http://ericlippert.com/2011/03/14/to-box-or-not-to-box/

そのため、コンパイラが using ブロックに対してどのようなコードを生成するかを知りたいと思っていました。

簡単な再現例: ここに画像の説明を入力

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

f# - C# ショップで働いていて、変換を ILSpy に頼るためだけに F# を書こうとすると、どのようなリスクがありますか?

C# ショップで働いていて、F# で機能を記述しようとして、ILSpy を使用して F# ソース コードを C# 表現に変換しようとすると、どのようなリスクが伴いますか?

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

.net - ICSharpCode Decompiler を使用して、ラムダ式のネストされたクラスが構文ツリーから欠落している

どうやら ICSharpCode Decompiler は、ラムダ式の C# コンパイラによって作成された内部クラスをどうにかして逆コンパイルしません。次の例を検討してください。

場合によっては、C# のラムダ式は、ラムダの本体を含むメソッドを使用して内部クラスにコンパイルされます。たとえば、次のような C# コードです。

コンパイラは、次のような内部クラスを追加します。

(これとまったく同じではないかもしれませんが、アイデアはわかります。)

問題は、これらの内部クラスMyClassを使用してアセンブリからプログラムで AST を構築しようとすると、ASTICSharpCode.Decompiler.Ast.AstBuilderに含まれないことです (他のすべては問題ありません)。MyClassの注釈の中にこれらの生成されたクラスを見ることさえできますTypeDecleration:型の注釈は、Mono.Cecil.TypeDefinitionこれらの内部クラスをそのNestedTypesプロパティに正しくリストします(したがって、それらはアセンブリから適切にロードされましたが、構文ツリーには追加されませんでした;他の、手動で作成された内部クラスは適切に逆コンパイルされます)。

私が開いたこの ILSpy の問題も参照してください: https://github.com/icsharpcode/ILSpy/issues/686

ここで明らかな何かが欠けていますか?また、GUI を使用して ILSpy からのアセンブリを調べたところ、問題のコードは適切に逆コンパイルされています (内部クラスではなく、ラムダが再構築されています)。