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