Sestavení obsahující zadaný typ

Při zkoumání Dynamics AX 2012 občas narážím na situace, kdy bych se chtěl dozvědět více o nějakém CLR typu (zejména dekompilovat ho v ILSpy) a potřebuji vědět, v jakém sestavení je se nachází.

Lze to řešit například takovouto X++ metodou:

public static void showContainingAssembly(str _typeName)
{
    System.AppDomain appDomain = System.AppDomain::get_CurrentDomain();
    System.Reflection.Assembly[] assemblies = appDomain.GetAssemblies();
    System.Reflection.Assembly assembly;
    int numOfAssemblies = assemblies.get_Count();
    int i;
 
    for (i = 0; i < numOfAssemblies; i++)
    {
        assembly = assemblies.get_Item(i);
        if (assembly.GetType(_typeName, false, true) != null)
        {
            info(strFmt("Assembly full name: %1", clr2XppStr(assembly.get_FullName())));
            info(strFmt("Assembly location: %1", clr2XppStr(assembly.get_Location())));
            break;
        }
    }
}

Metoda prostě načte všecha sestavení v akutální aplikační doméně a v každém zkusí najít zadaný typ. Pokud je hledání úspěšné, vypíše plné jméno sestavení a jeho fyzické umístění.

Zavoláte-li metodu například pro typ Microsoft.Dynamics.AX.Framework.Services.Client.MetadataCache, dostanete následující informaci:

Assembly full name: Microsoft.Dynamics.Framework.Metadata.AX, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Assembly location: C:\Windows\assembly\GAC_MSIL\Microsoft.Dynamics.Framework.Metadata.AX.0.0.0__31bf3856ad364e35\Microsoft.Dynamics.Framework.Metadata.AX.dll