A great tool…
I started using the CRM Solution Manager add-in for Visual Studio a little over a year ago when our in-house Microsoft Dynamics CRM development started ramping up. It has been an indispensable tool for streamlining the development and deployment process of our CRM customizations.
Anyone who has ever tried to use the Microsoft CRM SDK tools (or worse, the CRM web UI) to do these tasks can easily appreciate the benefits that CRM Solution Manager could offer.
The other big feature of the add-in is the ability to generate .NET proxy classes for your CRM entities. Just like the CRM SDK early-bound entity creation tools (CrmSvcUtil.exe), the proxy classes give you a type safe way of accessing all the attributes on an entity along with relationships, metadata, etc. Really awesome and helpful stuff. The big advantage of CRM Solution Manager over the SDK tools is the integration within the Visual Studio environment so that you can manage your proxy classes with a few clicks. The proxies that CRM Solution Manager generates are also compatible with the SDK Entity classes so they should fit easily into your existing customizations.
… but …
Well then, that all sounds very positive doesn’t it? Indeed the tool has been mostly great and problem free – certainly well worth the ~$200 US license cost. My problems have started with the newest release – version 3 – and the developers’ apparently waning support.
Shortly after the release of version 3 early this year, I paid for the license upgrade and prepared to enjoy all the benefits over the 2.x version (TypeScript support and better proxy class generation specifically). Unfortunately the problems began as soon as I opened my Visual Studio solution – the plugin displayed a generic error and refused to read or process my CRM metadata.
I sent the developers of CRM Solution Manager the log file as per their request and was fully prepared to work with them to resolve the issue, however I never received a response. It wasn’t until a bug fix release in May (about 3 months after I purchased the upgrade) that I was actually able to use the new version. I sent a couple emails during that 3 month period inquiring as to whether there was any progress fixing the issue, but again received no reply.
Sort of working now
To be honest I didn’t really care that I couldn’t use the newest version because we were in the middle of a major project and I didn’t have time to be messing with the toolset… But now that I’ve had some time to upgrade to the latest version (3.4.1), I’ve encountered a couple new headaches that really make me wonder if CRM Solution Manager is a good investment.
Missing entity properties from proxy classes
Coming from version 2, there were a handful of breaking changes but nothing significant – at least not at first glance. One issue I soon discovered was that some attributes had disappeared from the Opportunity proxy class. Namely accountid and customerid – instead leaving just access to the customerid property. Now technically this is not a big deal because accountid and customerid are just calculated values depending on the type of customer type, but this is more of a pain if you have plugin steps that only use one or the other. In my case, I would have to modify my plugins to include the customerid attribute in the Entity images and update the code accordingly.
Instead, I thought adding the accountid property back into the Opportunity proxy class myself would make the most sense. Unfortunately this highlights a weakness of the code generated by CRM Solution Manager: the proxy classes are not partial. The workaround is easy enough, but still a pain because you have to manually patch the proxy classes you want to make partial every time you update the classes from CRM as they are overridden each time
With everything compiling against the new proxy classes, I thought I was in the clear and deployed the new assemblies. Immediately plugin steps were failing – not a good sign. Upon further inspection, I located the issue in the BaseProxyClass generated by CRM Solution Manager. It was failing to instantiate any entity proxies because it was looking for a constructor with no arguments – of which there were none. This bug is a real headscratcher for me, because it’s so obvious and so fatal – I don’t understand how it hasn’t been fixed already.
Again, like the missing properties issue, I can patch the problem code myself but it’s a bit of a pain because I have to do so every time the proxies are updated from CRM.
Hello? Hello? … anyone there?
All of these issues have me constantly asking myself: does anyone else actually use CRM Solution Manager? I can’t believe these issues have gone unnoticed by anyone, and yet there’s not much discussion online and so far I haven’t received any response from the developers.
For the time being I’ll continue to use CRM Solution Manager because it still saves me a lot of development time – but I’ll be on the lookout for alternatives in case the next release of CRM Solution Manager stops working again or breaks some more code :\.