By default .NET framework 4.6 is not installed on the nodes of a Service Fabric cluster. According to the Azure support forum, this is because they wish to keep the nodes "as clean as possible". Citation needed as I can't seem to find the post again... Anyway it is not
installed. Read below on how to install it. If you already have an existing cluster, check the bottom of this post.

I wish to create a new cluster with support for .NET 4.6

Setup your cluster as usual in the Azure Portal but do not click on "Create" on the summary tab. 
Instead click on "Download template and parameters". In the new "window" that opens to the right click on "Deploy" and then on "Edit template".

Locate the following in the template on the right:

"virtualMachineProfile": {
                   "extensionProfile": {
                       "extensions": [

And add the following object to the end of the extensions array:

{
   "name":"CustomScriptExtensionInstallNet46",
   "properties":{
      "publisher":"Microsoft.Compute",
      "type":"CustomScriptExtension",
      "typeHandlerVersion":"1.7",
      "autoUpgradeMinorVersion":false,
      "settings":{
         "fileUris":[
            "https://serviceprofiler.azurewebsites.net/content/downloads/InstallNetFx46.ps1"
         ],
         "commandToExecute":"powershell.exe -ExecutionPolicy Unrestricted -File InstallNetFx46.ps1"
      },
      "forceUpdateTag":"RerunExtension"
   }
}

Thanks to the people at AzureServiceProfiler for hosting the Powershell script. For security reasons you might want to download the script, verify it and host it yourself before using the above extension.

Click on Save and then on "Edit parameters". Specify the parameters as below:

  • CLUSTERLOCATION (string) - The location specified under Basics -> Location (e.g. North Europe)
  • CLUSTERNAME (string) - The same value as Basics → Cluster name
  • COMPUTELOCATION (string) - The same value as CLUSTERLOCATION
  • VMSTORAGEACCOUNTNAME (string) - The name of the storage account to hold the image files for the VM. This account will be created so use any valid and available storage account name.
  • ADMINUSERNAME (string) - The same value as Basics → User name
  • ADMINPASSWORD (securestring) - The same value as Basics → Password
  • DNSNAME (string) - The same value as Basic → Cluster name

Leave everything else as is. Click OK. Select the resource group you specified under Basics -> Resource group or create a new one if that is what you chose under Basics -> Resource group.

Choose the same location as specified for the parameters CLUSTERLOCATION and COMPUTELOCATION.

Click "Review legal terms", read the terms and then click on "Purchase" to accept the terms.

Click on "Create" to create the cluster. Note that it might take a really long time to complete the creation (hours if you are unlycky). Status will be set to "Accepted" and nothing else seems to happen. Just wait for it and it will eventually complete.


I have already created my cluster and I do not wish to re-create the cluster!

A bit more work but really no problem. You can still install it by remoting to each of the nodes in the cluster and installing it manually. Use the URL for your cluster as the URL for remote deskop and specify the port based on which node you wish to connect to.

Node 0 = 3389 (the default port for remote desktop)
Node 1 = 3390
Node 2 = 3391
Node X = (3389 + X)

Note that each node needs to restart after the installation and that your .NET 4.6 application will not work properly until all nodes have been updated.

Also, as Nick pointed out in the comments, if you scale up your cluster, the new machines in the cluster will not have .NET 4.6 installed and your cluster will break.

2 Comments