Running a .Net reference code in the Server in Dynamics Ax
We have been recently building some .Net solutions for our vertical. I have consolidated my learnings from it and publishing here as a post.
1. Adding a .Net reference can be as easy as just to drop the dll in the client bin folder and then add it. But if you want the code to execute on the server then this wont work. You will have to publish the dll in the server “GAC(Global Assembly Cache)”. A assembly on the cache executes on the server. Look here for articles on publishing a dll to the cache (GAC Publishing) and assigning strong name to it (Assigning Strong Key).
2. When you look at for the GACUtil, you will find it in different places in different pc. The general places to look at are,
-> C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin
3. Every time you change and build the solution you have to un publish/publish it to the GAC. This can be difficult to do it manually. The easiest way is to add the following lines in your Project -> Properties -> Post-build event command line in your visual studio project.
//uninstal old version
//register new version
“gacutil.exe -i $(TargetPath)”
4. Though you run the code on the GAC it is necessary that the dll is added to all the clients just for compilation. It need not be updated as you revise your dll.
5. If the code is present in a server call then it is required to restart the server every time you re publish a new version to the GAC. What i found better was to test the code by client level execution(Through a job) and once the code is working fine you can move it to the server call.
6. If you are creating a .Net instance in a class and wanted to retain the instance as a global variable then you must declare the variable as CLRObject and not in the actual .Net namespace name(Eg: Microsoft.Dynamics.Csharp). Failing to do so results in a run time marshalling error.