64 bit ASP.NET Core on Azure App Service
When creating an Azure App Service .NET Core is already pre-installed. However, only the 32 bit .NET runtime is installed. During the 2.1 timeframe we are hoping to have both 32 and 64 bit runtimes installed as well as enabling the portal experience to switch between the two.
Until that time, here are a few ways that you can get a 64 bit runtime on Azure App Service.
1. Deploy a self-contained application
Self-contained deployments don't require .NET Core to be installed on a machine, because they carry the runtime they need with them. Because of this you can deploy a 64bit self-contained deployment to Azure App Service. For information about self-contained deployments you can look here:
CLI instructions: https://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli
Visual Studio instructions: https://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-vs
2. Deploy your own runtime
The pre-installed runtime is installed on a local SSD, but you can copy your own runtime onto your server and modify your application to use that instead. To do this you would:
- Download a zip of the x64 runtime that you want to use
- Go to the Kudu console (under advanced tools, debug console)
- Drag the zip of the runtime onto the file explorer section of the Kudu console. Kudu has a feature that will copy up the zip and extract it on the server. The UI should change as you drag the zip showing you a location to drop the zip in order for this feature to work.
- Modify your applications web.config to use the dotnet.exe that was just extracted on the server
A web.config file is generated for your ASP.NET Core application when you don't have one in your App. But if your application already contains one, then it will be used instead. Your web.config would like this:
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <remove name="aspNetCore"/> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> </handlers> <aspNetCore processPath="[PATH_TO_EXE]" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> </system.webServer> </configuration>
[PATH_TO_EXE] will point to the location you extracted the dotnet.exe, for example
D:\home\dotnet\dotnet.exe. Your application will now use the copy of dotnet.exe that you copied to the server, meaning that it is now using a 64 bit runtime.
NOTE: There are two main caveates with this approach. 1 you must service your own runtime. If a new patch of .NET Core comes out then you will need to deploy it yourself to get any improvements. 2 the cold start time of your application will likely be a bit slower as the runtime is loading from a slower drive.
3. Use Linux Azure App Service
There is no official 32 bit runtime for .NET Core available on Linux. Because of that, if you use Linux Azure App Service then you will have a 64 bit runtime with a normal deployment.
4. Use Web Apps for Containers
Because you are deploying your own container, with whichever runtime you choose, when using Containers you will always have the runtime that you want available. You can find more information about web Apps for Containers here: https://azure.microsoft.com/en-us/services/app-service/containers/
We hope to add 64 bit as a pre-installed option for Azure App Service , but in the meantime you can use the options listed here if you need a 64 bit runtime.