Five years ago, I wrote a blog post called Assembly containing a given type, demonstrating how to find the assembly where a given type is defined. I needed the same thing in AX 7, but instead of using the same code, I decided to utilize the fact that I can now easily write parts of my application in C#.
I added a C# class library project to the assembly with my X++ project and created a class with this method:
public static System.Reflection.Assembly findAssembly(string typeName) { var assemblies = AppDomain.CurrentDomain.GetAssemblies(); return assemblies.FirstOrDefault(a => a.GetType(typeName, false, true) != null); }
I built the solution, went to my X++ project and added a project reference to the C# project. (Right-click References node, choose Add reference…, select the project on the Projects tab and confirm.)
This allowed me to call my C# method from X++, which I did:
var assembly = MyClassLibrary.MyClass::findAssembly('Dynamics.AX.Application.AsyncTaskResult'); if (assembly != null) { info(assembly.FullName); info(assembly.Location); }
I saved a few lines of code, but more importantly I showed you how easy it is to use C# projects together with X++ projects. It’s extremely powerful, because C# (and other .NET languages) give you quite a few options that you don’t have in X++ (although it’s not the case of this particular example).
Hello!
Thank you so much for sharing this small tutorial and explanations about how to find assembly for a given type in Microsoft Dynamics AX system.