C#のMono.Cecil IL MethodBodyを読むための方法

使用してKufen.Common.Definitionsを。
使用してMono.Cecilを。
使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使ってSystem.Text.RegularExpressionsを。
使用してのSystem.Webを。

名前空間Kufen.WebApi.SwaggerHelp 
{ 
    パブリック クラスSwaggerModelHelp 
    { 
        パブリック 静的リスト<SwaggerEncryptModelInfo> GetDecryptRequestMetaInfoList()
        { 
            VARの decryptRequestMetaInfoList = 新しいリスト<SwaggerEncryptModelInfo> ();
            VaRのパス=typeof演算(SwaggerModelHelp).Assembly.Location。
            VaRのアセンブリ= AssemblyDefinition.ReadAssembly(パス)。
            VAR toInspect = assembly.MainModule 
              .GetTypes()
              .SelectMany(T => t.Methods.Select(M => 新しい{T、M}))
              .Where(X => xmHasBody)。
            toInspect = toInspect.Where(
                X => xtName.EndsWith(" コントローラ")&& 
                xmIsPublic ==  && 
                xmParameters.Any(M=> m.ParameterType.Name == がNameOf(DecryptRequest)) 
            )。
            foreachのVARの方法toInspect)
            { 
                VAR。containsEncryptRequestMethodBody = method.m.Body.Instructions.ToList()ここで、(M => m.ToString()(含まれています。" EncryptRequestHandler " ))FirstOrDefault()。
                もし(!containsEncryptRequestMethodBody = ヌル
                { 
                    VAR ilStr = containsEncryptRequestMethodBody.ToString();
                    VAR regMatchResult = Regex.Match(ilStr、"EncryptRequestHandler <(<EncryptRequestModel> [^、] +?)、(<EncryptResponseModel> [^?>] +)> " );
                     VAR encryptRequestModel = regMatchResult.Groups [ " EncryptRequestModel " ] .Valueの;
                     VAR encryptResponseModel = regMatchResult.Groups [ " EncryptResponseModel " ] .Valueの; 
                    decryptRequestMetaInfoList.Add(新しいSwaggerEncryptModelInfo 
                    { 
                        コントローラ = method.t.FullName、
                        アクション = = method.m.Name、
                        ReqModelTypeencryptRequestModel、
                        ResModelType = encryptResponseModel 
                    })。
                } 
            } 
            戻りdecryptRequestMetaInfoList。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/gaocong/p/11532214.html