Installera .NET på Azure Cloud Services-roller (klassiska)
Viktigt!
Cloud Services (klassisk) är nu inaktuellt för alla kunder från och med den 1 september 2024. Alla befintliga distributioner som körs stoppas och stängs av av Microsoft och data kommer att förloras kontinuerligt från och med oktober 2024. Nya distributioner bör använda den nya Azure Resource Manager-baserade distributionsmodellen Azure Cloud Services (utökad support).
Den här artikeln beskriver hur du installerar versioner av .NET Framework som inte medföljer Azure Guest OS. Du kan använda .NET i gästoperativsystemet för att konfigurera webb- och arbetsroller för molntjänsten.
Du kan till exempel installera .NET Framework 4.6.2 på gästoperativsystemfamiljen 4, som inte levereras med någon version av .NET Framework 4.6. (Gästoperativsystemfamiljen 5 levereras med .NET Framework 4.6.) Den senaste informationen om Azure Guest OS-versionerna finns i nyheter om Azure Guest OS-versionen.
Viktigt!
Azure SDK 2.9 innehåller en begränsning för att distribuera .NET Framework 4.6 i gästoperativsystemets familj 4 eller tidigare. En korrigering för begränsningen är tillgänglig på GitHub-lagringsplatsenazure-cloud-services-files
.
Om du vill installera .NET på dina webb- och arbetsroller inkluderar du .NET-webbinstallationsprogrammet som en del av molntjänstprojektet. Starta installationsprogrammet som en del av rollens startuppgifter.
Lägg till .NET-installationsprogrammet i projektet
Om du vill ladda ned webbinstallationsprogrammet för .NET Framework väljer du den version som du vill installera:
- Webbinstallationsprogrammet för .NET Framework 4.8.1
- Webbinstallationsprogrammet för .NET Framework 4.8
- Webbinstallationsprogrammet för .NET Framework 4.7.2
- Webbinstallationsprogrammet för .NET Framework 4.6.2
Så här lägger du till installationsprogrammet för en webbroll :
- Högerklicka på webbrollen under Roller i molntjänstprojektet i Solution Explorer och välj Lägg till>ny mapp. Skapa en mapp med namnet bin.
- Högerklicka på mappen bin och välj Lägg till>befintligt objekt. Välj .NET-installationsprogrammet och lägg till det i mappen bin.
Så här lägger du till installationsprogrammet för en arbetsroll :
- Högerklicka på arbetsrollen och välj Lägg till>befintligt objekt. Välj .NET-installationsprogrammet och lägg till det i rollen.
När filer läggs till på det här sättet i rollinnehållsmappen lägger de automatiskt till i molntjänstpaketet. Filerna distribueras sedan till en konsekvent plats på den virtuella datorn. Upprepa den här processen för varje webb- och arbetsroll i molntjänsten så att alla roller har en kopia av installationsprogrammet.
Kommentar
Du bör installera .NET Framework 4.6.2 på molntjänstrollen även om ditt program är avsett för .NET Framework 4.6. Gästoperativsystemet innehåller kunskapsbasuppdateringen 3098779 och uppdatering 3097997. Problem kan uppstå när du kör .NET-program om .NET Framework 4.6 är installerat ovanpå Knowledge Base-uppdateringarna. Undvik dessa problem genom att installera .NET Framework 4.6.2 i stället för version 4.6. Mer information finns i kunskapsbasartikeln 3118750 och 4340191.
Definiera startuppgifter för dina roller
Du kan använda startuppgifter för att utföra åtgärder innan en roll startar. Om du installerar .NET Framework som en del av startuppgiften ser du till att ramverket installeras innan någon programkod körs. Mer information om startuppgifter finns i Köra startuppgifter i Azure.
Lägg till följande innehåll i filen ServiceDefinition.csdef under noden WebRole eller WorkerRole för alla roller:
<LocalResources> <LocalStorage name="NETFXInstall" sizeInMB="1024" cleanOnRoleRecycle="false" /> </LocalResources> <Startup> <Task commandLine="install.cmd" executionContext="elevated" taskType="simple"> <Environment> <Variable name="PathToNETFXInstall"> <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='NETFXInstall']/@path" /> </Variable> <Variable name="ComputeEmulatorRunning"> <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" /> </Variable> </Environment> </Task> </Startup>
Föregående konfiguration kör konsolkommandot
install.cmd
med administratörsbehörighet för att installera .NET Framework. Konfigurationen skapar också ett LocalStorage-element med namnet NETFXInstall. Startskriptet anger att temp-mappen ska använda den här lokala lagringsresursen.Viktigt!
För att säkerställa korrekt installation av ramverket anger du storleken på den här resursen till minst 1 024 MB.
Mer information om startuppgifter finns i Vanliga startuppgifter för Azure Cloud Services.
Skapa en fil med namnet install.cmd och lägg till följande installationsskript i filen.
Skriptet kontrollerar om den angivna versionen av .NET Framework finns på datorn genom att fråga registret. Om .NET Framework-versionen inte är installerad öppnas .NET Framework-webbinstallationsprogrammet. För att felsöka eventuella problem loggar skriptet all aktivitet till filen startuptasklog-(aktuellt datum och tid).txt som lagras i InstallLogs lokala lagring.
Viktigt!
Använd en grundläggande textredigerare som Windows Anteckningar för att skapa filen install.cmd. Om du använder Visual Studio för att skapa en textfil och ändra tillägget till .cmd kan filen fortfarande innehålla en UTF-8 byte-ordermarkering. Det här märket kan orsaka ett fel när den första raden i skriptet körs. Undvik det här felet genom att göra den första raden i skriptet till en REM-instruktion som kan hoppas över av bytebeställningsbearbetningen.
REM Set the value of netfx to install appropriate .NET Framework. REM ***** To install .NET 4.5.2 set the variable netfx to "NDP452" ***** https://go.microsoft.com/fwlink/?LinkId=397707 REM ***** To install .NET 4.6 set the variable netfx to "NDP46" ***** https://go.microsoft.com/fwlink/?LinkId=528222 REM ***** To install .NET 4.6.1 set the variable netfx to "NDP461" ***** https://go.microsoft.com/fwlink/?LinkId=671729 REM ***** To install .NET 4.6.2 set the variable netfx to "NDP462" ***** https://go.microsoft.com/fwlink/?linkid=780596 REM ***** To install .NET 4.7 set the variable netfx to "NDP47" ***** https://go.microsoft.com/fwlink/?LinkId=825298 REM ***** To install .NET 4.7.1 set the variable netfx to "NDP471" ***** https://go.microsoft.com/fwlink/?LinkId=852095 REM ***** To install .NET 4.7.2 set the variable netfx to "NDP472" ***** https://go.microsoft.com/fwlink/?LinkId=863262 REM ***** To install .NET 4.8 set the variable netfx to "NDP48" ***** https://dotnet.microsoft.com/download/thank-you/net48 REM ***** To install .NET 4.8.1 set the variable netfx to "NDP481" ***** https://go.microsoft.com/fwlink/?linkid=2215256 set netfx="NDP481" REM ***** Set script start timestamp **** set timehour=%time:~0,2% set timestamp=%date:~-4,4%%date:~-10,2%%date:~-7,2%-%timehour: =0%%time:~3,2% set "log=install.cmd started %timestamp%." REM ***** Exit script if running in Emulator ***** if "%ComputeEmulatorRunning%"=="true" goto exit REM ***** Needed to correctly install .NET 4.6.1, otherwise you may see an out of disk space error ***** set TMP=%PathToNETFXInstall% set TEMP=%PathToNETFXInstall% REM ***** Setup .NET filenames and registry keys ***** if %netfx%=="NDP481" goto NDP481 if %netfx%=="NDP48" goto NDP48 if %netfx%=="NDP472" goto NDP472 if %netfx%=="NDP471" goto NDP471 if %netfx%=="NDP47" goto NDP47 if %netfx%=="NDP462" goto NDP462 if %netfx%=="NDP461" goto NDP461 if %netfx%=="NDP46" goto NDP46 set "netfxinstallfile=NDP452-KB2901954-Web.exe" set netfxregkey="0x5cbf5" set netfxUrl="https://go.microsoft.com/fwlink/?LinkId=397707" goto logtimestamp :NDP46 set "netfxinstallfile=NDP46-KB3045560-Web.exe" set netfxregkey="0x6004f" set netfxUrl="https://go.microsoft.com/fwlink/?LinkId=528222" goto logtimestamp :NDP461 set "netfxinstallfile=NDP461-KB3102438-Web.exe" set netfxregkey="0x6040e" set netfxUrl="https://go.microsoft.com/fwlink/?LinkId=671729" goto logtimestamp :NDP462 set "netfxinstallfile=NDP462-KB3151802-Web.exe" set netfxregkey="0x60632" set netfxUrl="https://go.microsoft.com/fwlink/?linkid=780596" goto logtimestamp :NDP47 set "netfxinstallfile=NDP47-KB3186500-Web.exe" set netfxregkey="0x707FE" set netfxUrl="https://go.microsoft.com/fwlink/?LinkId=825298" goto logtimestamp :NDP471 set "netfxinstallfile=NDP471-KB4033344-Web.exe" set netfxregkey="0x709fc" set netfxUrl="https://go.microsoft.com/fwlink/?LinkId=852095" goto logtimestamp :NDP472 set "netfxinstallfile=NDP472-KB4054531-Web.exe" set netfxregkey="0x70BF0" set netfxUrl="https://go.microsoft.com/fwlink/?LinkId=863262" goto logtimestamp :NDP48 set "netfxinstallfile=NDP48-Web.exe" set netfxregkey="0x80EA8" set netfxUrl="https://dotnet.microsoft.com/download/thank-you/net48" goto logtimestamp :NDP481 set "netfxinstallfile=NDP481-Web.exe" set netfxregkey="0x82348" set netfxUrl="https://go.microsoft.com/fwlink/?linkid=2215256" goto logtimestamp :logtimestamp REM ***** Setup LogFile with timestamp ***** md "%PathToNETFXInstall%\log" set startuptasklog="%PathToNETFXInstall%log\startuptasklog-%timestamp%.txt" set netfxinstallerlog="%PathToNETFXInstall%log\NetFXInstallerLog-%timestamp%" echo %log% >> %startuptasklog% echo Logfile generated at: %startuptasklog% >> %startuptasklog% echo TMP set to: %TMP% >> %startuptasklog% echo TEMP set to: %TEMP% >> %startuptasklog% REM ***** Check if .NET is installed ***** echo Checking if .NET (%netfx%) is installed >> %startuptasklog% set /A netfxregkeydecimal=%netfxregkey% set foundkey=0 FOR /F "usebackq skip=2 tokens=1,2*" %%A in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release 2^>nul`) do @set /A foundkey=%%C echo Minimum required key: %netfxregkeydecimal% -- found key: %foundkey% >> %startuptasklog% if %foundkey% GEQ %netfxregkeydecimal% goto installed REM ***** Downloading .NET Framework Setup ***** set retryCount=0 set maxRetry=3 set delayInSeconds=60 echo Downloading .NET Framework %netfx% setup with commandline: powershell -Command "Invoke-WebRequest %netfxUrl% -OutFile %~dp0%netfxinstallfile%" >> %startuptasklog% goto loop :loop if %retryCount% NEQ 0 echo %date% %time% : Waiting %delayInSeconds% seconds to retry >> %startuptasklog% if %retryCount% NEQ 0 (powershell -Command "Start-Sleep -Seconds %delayInSeconds%") set /a retryCount=%retryCount%+1 echo %date% %time% : Try downloading... [%retryCount% of %maxRetry%] >> %startuptasklog% powershell -Command "Invoke-WebRequest %netfxUrl% -OutFile %~dp0%netfxinstallfile%" if %ERRORLEVEL% NEQ 0 if %retryCount% NEQ %maxRetry% goto loop if %ERRORLEVEL% NEQ 0 if %retryCount%== %maxRetry% echo Taking existing file to install since error occurred while downloading .NET framework %netfx% setup from %netfxUrl%. >> %startuptasklog% if %ERRORLEVEL%== 0 echo %date% %time% : Successfully downloaded .NET framework %netfx% setup file. >> %startuptasklog% goto install :install REM ***** Installing .NET ***** echo Installing .NET with commandline: start /wait %~dp0%netfxinstallfile% /q /serialdownload /log %netfxinstallerlog% /chainingpackage "CloudService Startup Task" >> %startuptasklog% start /wait %~dp0%netfxinstallfile% /q /serialdownload /log %netfxinstallerlog% /chainingpackage "CloudService Startup Task" >> %startuptasklog% 2>>&1 if %ERRORLEVEL%== 0 goto installed echo .NET installer exited with code %ERRORLEVEL% >> %startuptasklog% if %ERRORLEVEL%== 3010 goto restart if %ERRORLEVEL%== 1641 goto restart echo .NET (%netfx%) install failed with Error Code %ERRORLEVEL%. Further logs can be found in %netfxinstallerlog% >> %startuptasklog% goto exit :restart echo Restarting to complete .NET (%netfx%) installation >> %startuptasklog% shutdown.exe /r /t 5 /c "Installed .NET framework" /f /d p:2:4 :installed echo .NET (%netfx%) is installed >> %startuptasklog% :end echo install.cmd completed: %date:~-4,4%%date:~-10,2%%date:~-7,2%-%timehour: =0%%time:~3,2% >> %startuptasklog% :exit EXIT /B 0
Lägg till install.cmd-filen i varje roll med hjälp av Lägg till>befintligt objekt i Solution Explorer enligt beskrivningen tidigare i den här artikeln.
När det här steget är klart bör alla roller ha .NET-installationsfilen och install.cmd-filen.
Konfigurera diagnostik för att överföra startloggar till Blob Storage
För att förenkla felsökningen av installationsproblem kan du konfigurera Azure Diagnostics för att överföra loggfiler som genereras av startskriptet eller .NET-installationsprogrammet till Azure Blob Storage. Med den här metoden kan du visa loggarna genom att ladda ned loggfilerna från Blob Storage i stället för att behöva fjärrskrivbord till rollen.
Om du vill konfigurera Diagnostik öppnar du filen diagnostics.wadcfgx och lägger till följande innehåll under noden Kataloger :
<DataSources>
<DirectoryConfiguration containerName="netfx-install">
<LocalResource name="NETFXInstall" relativePath="log"/>
</DirectoryConfiguration>
</DataSources>
Den här XML-koden konfigurerar diagnostik för att överföra filerna i loggkatalogen i NETFXInstall-resursen till diagnostiklagringskontot i blobcontainern netfx-install .
Distribuera din molntjänst
När du distribuerar molntjänsten installerar startuppgifterna .NET Framework (om det behövs). Dina molntjänstroller är i upptaget tillstånd medan ramverket installeras. Om ramverksinstallationen kräver en omstart kan även tjänstrollerna startas om.