Instalace .NET na azure Cloud Services (klasické) role
Důležité
Cloud Services (classic) je teď pro nové zákazníky zastaralé a 31. srpna 2024 bude vyřazeno pro všechny zákazníky. Nová nasazení by měla používat nový model nasazení založený na Azure Resource Manager Azure Cloud Services (rozšířená podpora).
Tento článek popisuje, jak nainstalovat verze rozhraní .NET Framework, které nejsou součástí hostovaného operačního systému Azure. Pomocí rozhraní .NET v hostovaném operačním systému můžete nakonfigurovat webové role a role pracovního procesu cloudové služby.
Můžete například nainstalovat rozhraní .NET Framework 4.6.2 na řadu hostovaných operačních systémů 4, která není součástí žádné verze rozhraní .NET Framework 4.6. (Řada hostovaných operačních systémů 5 je součástí rozhraní .NET Framework 4.6.) Nejnovější informace o vydáních hostovaných operačních systému Azure najdete v tématu Novinky o vydání hostovaného operačního systému Azure.
Důležité
Sada Azure SDK 2.9 obsahuje omezení pro nasazení rozhraní .NET Framework 4.6 v rámci řady hostovaných operačních systémů 4 nebo starších. Oprava omezení je k dispozici v úložištiazure-cloud-services-files
GitHub.
Pokud chcete nainstalovat .NET na web a roli pracovního procesu, zahrňte webový instalační program .NET jako součást projektu cloudové služby. Spusťte instalační program jako součást úloh při spuštění role.
Přidání instalačního programu .NET do projektu
Chcete-li stáhnout webový instalační program pro rozhraní .NET Framework, zvolte verzi, kterou chcete nainstalovat:
- Webový instalační program rozhraní .NET Framework 4.8.1
- Webová instalační služba rozhraní .NET Framework 4.8
- Webová instalační služba rozhraní .NET Framework 4.7.2
- Webová instalační služba rozhraní .NET Framework 4.6.2
Přidání instalačního programu pro webovou roli:
- V Průzkumník řešení v části Role v projektu cloudové služby klikněte pravým tlačítkem na svoji webovou roli a vyberte Přidat>novou složku. Vytvořte složku s názvem bin.
- Klikněte pravým tlačítkem na složku bin a vyberte Přidat>existující položku. Vyberte instalační program .NET a přidejte ho do složky bin.
Postup přidání instalačního programu pro roli pracovního procesu :
- Klikněte pravým tlačítkem na roli pracovního procesu a vyberte Přidat>existující položku. Vyberte instalační program .NET a přidejte ho do role.
Když se soubory tímto způsobem přidají do složky obsahu role, automaticky se přidají do balíčku cloudové služby. Soubory se pak nasadí do konzistentního umístění na virtuálním počítači. Tento postup opakujte pro každou webovou roli a roli pracovního procesu v cloudové službě, aby všechny role měly kopii instalačního programu.
Poznámka
Na roli cloudové služby byste měli nainstalovat rozhraní .NET Framework 4.6.2, i když vaše aplikace cílí na rozhraní .NET Framework 4.6. Hostovaný operační systém zahrnuje 3098779 aktualizace znalostní báze Knowledge Base a 3097997 aktualizací. Při spouštění aplikací .NET může dojít k problémům, pokud je rozhraní .NET Framework 4.6 nainstalováno nad aktualizacemi znalostní báze Knowledge Base. Chcete-li se těmto problémům vyhnout, nainstalujte .NET Framework 4.6.2 místo verze 4.6. Další informace najdete v článku znalostní báze Knowledge Base 3118750 a 4340191.
Definování úloh po spuštění pro vaše role
Úlohy po spuštění můžete použít k provádění operací před spuštěním role. Instalace rozhraní .NET Framework jako součást úlohy po spuštění zajistí, že se rozhraní nainstaluje před spuštěním kódu aplikace. Další informace o úlohách po spuštění najdete v tématu Spouštění úloh po spuštění v Azure.
Do souboru ServiceDefinition.csdef v uzlu WebRole nebo WorkerRole pro všechny role přidejte následující obsah:
<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>
Předchozí konfigurace spustí příkaz
install.cmd
konzoly s oprávněními správce k instalaci rozhraní .NET Framework. Konfigurace také vytvoří element LocalStorage s názvem NETFXInstall. Spouštěcí skript nastaví složku temp tak, aby používala tento prostředek místního úložiště.Důležité
Pokud chcete zajistit správnou instalaci rozhraní, nastavte velikost tohoto prostředku alespoň na 1 024 MB.
Další informace o úlohách po spuštění najdete v tématu Běžné úlohy azure Cloud Services po spuštění.
Vytvořte soubor s názvem install.cmd a přidejte do souboru následující instalační skript.
Skript zkontroluje, zda je zadaná verze rozhraní .NET Framework již nainstalována na počítači dotazováním registru. Pokud není nainstalována verze rozhraní .NET Framework, je otevřen webový instalační program rozhraní .NET Framework. Aby skript pomohl vyřešit případné problémy, protokoluje všechny aktivity do souboru startuptasklog (aktuální datum a čas) .txt, který je uložený v místním úložišti InstallLogs .
Důležité
K vytvoření souboru install.cmd použijte základní textový editor, jako je Windows Poznámkový blok. Pokud pomocí sady Visual Studio vytvoříte textový soubor a změníte příponu na .cmd, může soubor stále obsahovat značku pořadí bajtů UTF-8. Tato značka může způsobit chybu při spuštění prvního řádku skriptu. Chcete-li se této chybě vyhnout, nastavte na prvním řádku skriptu příkaz REM, který lze přeskočit zpracováním pořadí bajtů.
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
Přidejte do každé role soubor install.cmd pomocí příkazu Přidat>existující položku v Průzkumník řešení, jak je popsáno výše v tomto tématu.
Po dokončení tohoto kroku by všechny role měly mít instalační soubor .NET a soubor install.cmd.
Konfigurace diagnostiky pro přenos protokolů spuštění do úložiště objektů blob
Pokud chcete zjednodušit řešení potíží s instalací, můžete nakonfigurovat Azure Diagnostics pro přenos souborů protokolu vygenerovaných spouštěcím skriptem nebo instalačním programem .NET do služby Azure Blob Storage. Pomocí tohoto přístupu můžete protokoly zobrazit tak, že stáhnete soubory protokolů z úložiště objektů blob a nemusíte do role používat vzdálenou plochu.
Pokud chcete nakonfigurovat diagnostiku, otevřete soubor diagnostics.wadcfgx a do uzlu Adresáře přidejte následující obsah:
<DataSources>
<DirectoryConfiguration containerName="netfx-install">
<LocalResource name="NETFXInstall" relativePath="log"/>
</DirectoryConfiguration>
</DataSources>
Tento XML nakonfiguruje diagnostiku tak, aby přenášela soubory v adresáři protokolů v prostředku NETFXInstall do účtu úložiště diagnostiky v kontejneru objektů blob netfx-install .
Nasazení cloudové služby
Když nasadíte cloudovou službu, úlohy po spuštění nainstalují rozhraní .NET Framework, pokud ještě není nainstalované. Vaše role cloudové služby jsou během instalace architektury v zaneprázdněném stavu. Pokud instalace architektury vyžaduje restartování, můžou se restartovat i role služby.