At long last a version of the CDS SDK is available with .NET Core 3.0 and 3.1 as target frameworks! This release marks a lot of significant change as well with the SDK to align with how CDS and Dynamics are marketed and sold. Gone are the days of XRM and CRM, welcome to the SDK aligning now with Power Platform and CDS.
- This is an ALPHA release
- Use at your own risk
- There is no support
- Namespace/class names may and will change through releases
- Only OAuth, Certificate, Client Secret authentication types (for .NET Core)
- Do not use this in production
Effectively the Xrm Tooling library but instead of CrmServiceClient it is CdsServiceClient in a new namespace. Removes items that are specific to Dynamics 1st party apps, only contains items for “CDS naked”, i.e. no Dynamics 1st party like lead messages, case messages, etc.
A helper library with the Dynamics 1st party specific items for Sales and Service.
A helper library for Sales, Service and Marketing Dynamics 1st party applications.
Getting the Packages
If you are using NuGet Package Manager and searching for these packages you might not find them and that is because they are all flagged as pre-release packages being that they are alpha releases.
Within NuGet Package Manager ensure you select the checkbox “Include prerelease” when you are searching and you should then see them appear.
Breaking it down…
Right off the bat from the packages you can see just as CDS and Dynamics are now sold as separate items, the SDK follows that pattern. The Cds.Client library contains ONLY the CDS specific items it needs to and gone is everything related to Dynamics 1st party apps. So if you are building right on CDS all you need is the Cds.Client library. This is great as the profile of the core client library gets a lot smaller and allows for the potential of faster iteration of that library without all the bulk of the other functions that the 1st party applications bring.
When you import the Cds.Client library you will notice it still also has a dependency to ADAL 3.x. This is likely the reason behind the lack of support for username/password on .NET Core. It is very likely that as the preview goes on this is something that could change to at least the latest version of ADAL or even MSAL, the new version of ADAL that has been out for a while now. This is an alpha and it looks like a very straight forward port of the existing Xrm.Tooling library with all the same version dependencies.
I have played with CdsServiceClient and it works just like CrmServiceClient. I have CDS Azure Functions running on Linux (😜 so cool).
Why is this cool?
The following are my top why its cool items but I am sure others will have a bunch more as well.
Azure Functions 2.0/3.0 support
Azure Functions 2.0 removed .NET Framework support so if you were building functions with CDS and wanted to use the tooling then you were stuck on 1.0 functions. Azure Functions 1.0 haven’t be upgraded or touched and you can’t benefit from the advancements made in later versions
ASP.NET Core 3.x support
When ASP.NET Core 3.x released it killed support for .NET Framework as well. Previously you could only do up to ASP.NET Core 2.2 while using CDS/Dynamics SDK.
You can build CDS applications that run from platforms other than Windows using the SDK.
I am sure this brings with it a lot of questions from developers.
- Can you use this to build plugins? No.
- Does CrmSvcUtil still work to build strongly typed classes? Yes.
The spot to post your questions and interact with others using this alpha release is on the Power Apps component framework, ALM & Pro Dev Forums.
Matt B has posted an announcement about the release as well, Announcing the .net Core SDK for Common Data Service (CDS) – External Client Development.
This is great to see this release so early and the SDK team interested in the engagement from the community. A huge thank you to them for considering to do this and really look forward to more opportunity for this type of early access publicly. Go out there, use it and provide your feedback to help shape the changes you want and need in the SDK.