13

発生している問題をデバッグしようとしているときに、Microsoftから.NET 4.5リファレンスソースをインストールしましたが、で次の問題に遭遇しましたHttpApplication.cs

// execution step -- call asynchronous event
internal class AsyncEventExecutionStep : IExecutionStep { 
    private HttpApplication     _application;
    private BeginEventHandler   _beginHandler;
    private EndEventHandler     _endHandler;
    private Object              _state; 
    private AsyncCallback       _completionCallback;
    private AsyncStepCompletionInfo _asyncStepCompletionInfo; // per call 
    private bool                _[....];          // per call 
    private string              _targetTypeStr;

最後から2番目の行に注意してくださいprivate bool _[....]; // per call

_[....]有効な識別子(ILを含むあらゆるレベルのコンパイル)ですか、それともコンパイル後にソースが変更されていますか?

4

2 に答える 2

8

いいえ; それは無効です。

ソースをリリースする前に、Microsoftは、すべての従業員名を。に置き換える、記述が不十分な内部ツールを使用してソースを実行しました[....]
残念ながら、このツールは実際のソースも置き換えます。

これは実際には逆効果です。コンパイルされたメタデータ(たとえば、Reflector)を調べることで、隠されたソースのほとんどが実際に何であったかを知ることができます。

あなたの特定の行はprivate bool _sync

于 2012-12-20T15:13:40.027 に答える
3

@SLaksの回答はおそらく正しいものですが、これはILレベルで潜在的に有効な識別子であることに注意することが重要です。ECMA335パーティションII、セクション5.3には次のように記載されています。

[T] ILAsm構文では、Unicode文字セットを使用して形成できる任意の識別子を使用できます(パーティションIを参照)。これを実現するには、識別子を一重引用符で囲みます。

以下は、コンソールにFalseを出力する完全に有効なILです。

.assembly 'ValidIDTest'
{
}

   .class public TestClass
   {
    .field static public bool '_[...]'

    .method static void Main() cil managed
    {
        .entrypoint
        ldsfld bool TestClass::'_[...]'
        call void [mscorlib]System.Console::WriteLine(bool)
        ret    
    }
   }
于 2012-12-20T15:41:23.093 に答える