Azure .NET SDK Namespace - Microsoft.Azure.* Vs Microsoft.WindowsAzure.*

Here describing about 2 main categories of Azure SDKs and also telling about how they differentiate. I know many of you are using these 2 categories of Azure SDKs and got the question about their difference

Azure Service Manager and Azure Resource Manager

You might already know that Azure has these two model of deployment, known as ASM and ARM models. ASM is old and all resources are now migrating to ARM model. Please refer here, for a complete list of comaprison. Please refer here for an even more detailed picture.

Azure Client SDK for .NET 

SDKs are used in our custom applications to communicate with Azure Services. We have separate SDKs for both ASM and ARM models. SDK libraries with a namespace starting as Microsoft.WindowsAzure is for ASM model and for ARM model, you have SDK libraries with a namespace starting with Microsoft.Azure. If you choose SDKs for Azure, you first need to check the target deployment model, i.e., is it ASM or ARM?
 
If an Azure Service has been deployed with ASM model and the SDK you are planing to use is ARM model, then it won't work. For example, SDK library with a namespace Microsoft.WindowsAzure.Management doesn't support creating the storage account under a resource group. Because resource group is an ARM model way of organizing Azure resources and here, Microsoft.WindowsAzure.Management has a namespace belonging to ASM.

Why two .NET SDK Models

ASM is a model which first started in Azure and we have live Azure Entities running under ASM and so Microsoft.WindowsAzure SDKs are still very much needed. Moreover, not all the services are supported in Microsoft.Azure SDKs, but it is still updating. The list of supported services are mentioned here.

Decision making before real work has a crucial role in IT. I hope this blog will add some insights to your knowledge for taking a decision before any Azure SDK work.