Megosztás a következőn keresztül:


A .NET telepítése az Azure Cloud Services (klasszikus) szerepkörökre

Fontos

A Cloud Services (klasszikus) 2024. szeptember 1-étől minden ügyfél számára elavult. A Microsoft leállítja és leállítja a meglévő üzemelő példányokat, és 2024 októberétől folyamatosan elvesznek az adatok. Az új üzemelő példányoknak az Azure Cloud Services új Azure Resource Manager-alapú üzemi modelljét (kiterjesztett támogatás) kell használniuk.

Ez a cikk azt ismerteti, hogyan telepíthet olyan .NET-keretrendszer verziókat, amelyek nem az Azure Guest OS-hez érkeznek. A vendég operációs rendszeren a .NET használatával konfigurálhatja a felhőszolgáltatás webes és feldolgozói szerepköreit.

Telepítheti például a .NET-keretrendszer 4.6.2-es verzióját a vendég operációs rendszer 4-es családjára, amely nem jár a .NET-keretrendszer 4.6-os verziójának kiadásával. (A vendég operációs rendszer 5-ös családja .NET-keretrendszer 4.6-os verzióval rendelkezik.) Az Azure Vendég operációs rendszer kiadásával kapcsolatos legfrissebb információkért tekintse meg az Azure Guest OS kiadási híreit.

Fontos

Az Azure SDK 2.9 korlátozást tartalmaz a 4.6-os .NET-keretrendszer 4.6-os vagy korábbi vendég operációsrendszer-családon való üzembe helyezésére. A korlátozás javítása a azure-cloud-services-files GitHub-adattárban érhető el.

Ha a webes és feldolgozói szerepkörökre szeretné telepíteni a .NET-et, a felhőszolgáltatás-projekt részeként vegye fel a .NET-webtelepítőt. Indítsa el a telepítőt a szerepkör indítási feladatainak részeként.

A .NET-telepítő hozzáadása a projekthez

A .NET-keretrendszer webtelepítőjének letöltéséhez válassza ki a telepíteni kívánt verziót:

Webszerepkör telepítőjének hozzáadása:

  1. A Megoldáskezelő felhőszolgáltatás-projekt szerepkörei területén kattintson a jobb gombbal a webes szerepkörre, és válassza az Új mappa hozzáadása>lehetőséget. Hozzon létre egy bin nevű mappát.
  2. Kattintson a jobb gombbal a bin mappára, és válassza a Meglévő elem hozzáadása lehetőséget>. Válassza ki a .NET-telepítőt, és adja hozzá a tárolómappához.

A feldolgozói szerepkör telepítőjének hozzáadása:

  • Kattintson a jobb gombbal a feldolgozói szerepkörre, és válassza a Meglévő elem hozzáadása lehetőséget>. Válassza ki a .NET-telepítőt, és adja hozzá a szerepkörhöz.

Ha ilyen módon ad hozzá fájlokat a szerepkör tartalommappájához, azok automatikusan hozzáadódnak a felhőszolgáltatás-csomaghoz. A fájlok ezután a virtuális gép konzisztens helyére lesznek üzembe helyezve. Ismételje meg ezt a folyamatot a felhőszolgáltatás minden webes és feldolgozói szerepköréhez, hogy minden szerepkör rendelkezik a telepítő másolatával.

Feljegyzés

A .NET-keretrendszer 4.6.2-t akkor is telepítenie kell a felhőszolgáltatás-szerepkörére, ha az alkalmazás a 4.6-os .NET-keretrendszer célozza meg. A vendég operációs rendszer tartalmazza a Tudásbázis frissítési 3098779 és a 3097997 frissítését. A .NET-alkalmazások futtatásakor problémák léphetnek fel, ha .NET-keretrendszer 4.6 telepítve van a Tudásbázis frissítéseire. A problémák elkerülése érdekében telepítse a .NET-keretrendszer 4.6.2-es verzióját a 4.6-os verzió helyett. További információt a Tudásbázis 3118750 és 4340191 című cikkében talál.

Szerepkör tartalma telepítőfájlokkal

Indítási feladatok definiálása a szerepkörökhöz

Az indítási feladatokkal műveleteket hajthat végre egy szerepkör indítása előtt. A .NET-keretrendszer telepítése az indítási feladat részeként biztosítja, hogy a keretrendszer telepítve legyen az alkalmazáskódok futtatása előtt. Az indítási feladatokkal kapcsolatos további információkért lásd : Indítási feladatok futtatása az Azure-ban.

  1. Adja hozzá a következő tartalmat a ServiceDefinition.csdef fájlhoz a WebRole vagy WorkerRole csomópont alatt az összes szerepkörhöz:

    <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>
    

    Az előző konfiguráció rendszergazdai jogosultságokkal futtatja a konzolparancsot install.cmd a .NET-keretrendszer telepítéséhez. A konfiguráció egy NETFXInstall nevű LocalStorage elemet is létrehoz. Az indítási szkript beállítja az ideiglenes mappát, hogy ezt a helyi tárolási erőforrást használja.

    Fontos

    A keretrendszer megfelelő telepítéséhez állítsa az erőforrás méretét legalább 1024 MB-ra.

    Az indítási feladatokkal kapcsolatos további információkért tekintse meg az Azure Cloud Services gyakori indítási feladatait.

  2. Hozzon létre egy install.cmd nevű fájlt, és adja hozzá a következő telepítési szkriptet a fájlhoz.

    A szkript a beállításjegyzék lekérdezésével ellenőrzi, hogy a .NET-keretrendszer megadott verziója megtalálható-e a számítógépen. Ha a .NET-keretrendszer verzió nincs telepítve, akkor megnyílik a .NET-keretrendszer webtelepítő. A problémák elhárításához a szkript naplózza az összes tevékenységet a fájl startuptasklog -(aktuális dátum és idő).txt, amely az InstallLogs helyi tárolóban van tárolva.

    Fontos

    A install.cmd fájl létrehozásához használjon egy egyszerű szövegszerkesztőt, például a Windows Jegyzettömbet. Ha a Visual Studio használatával hoz létre egy szövegfájlt, és a bővítményt .cmd értékre módosítja, a fájl továbbra is tartalmazhat UTF-8 bájtos rendelésjelet. Ez a jel hibát okozhat a szkript első sora futtatásakor. A hiba elkerülése érdekében a szkript első sorát rem utasítássá kell tenni, amelyet kihagyhat a bájtsorrend feldolgozása.

    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
    
  3. Adja hozzá a install.cmd fájlt az egyes szerepkörökhöz a jelen cikk korábbi részében ismertetett Megoldáskezelő Meglévő elem hozzáadása>funkcióval.

    A lépés befejezése után minden szerepkörnek rendelkeznie kell a .NET telepítőfájllal és a install.cmd fájllal.

    Szerepkör tartalma az összes fájllal

Diagnosztika konfigurálása indítási naplók Blob Storage-ba való átviteléhez

A telepítési problémák elhárításának egyszerűsítése érdekében konfigurálhatja az Azure Diagnosticst az indítási szkript vagy a .NET-telepítő által létrehozott naplófájlok Azure Blob Storage-ba való átvitelére. Ezzel a módszerrel úgy tekintheti meg a naplókat, hogy nem távoli asztalra, hanem a Blob Storage-ból tölti le a naplófájlokat a szerepkörbe.

A Diagnostics konfigurálásához nyissa meg a diagnostics.wadcfgx fájlt, és adja hozzá a következő tartalmat a Címtárak csomópont alatt:

<DataSources>
 <DirectoryConfiguration containerName="netfx-install">
  <LocalResource name="NETFXInstall" relativePath="log"/>
 </DirectoryConfiguration>
</DataSources>

Ez az XML úgy konfigurálja a Diagnosticst, hogy a NETFXInstall erőforrás naplókönyvtárában lévő fájlokat a netfx-install blobtároló Diagnosztikai tárfiókjába helyezze át.

A felhőszolgáltatás üzembe helyezése

A felhőszolgáltatás üzembe helyezésekor az indítási feladatok telepítik a .NET-keretrendszer (ha szükséges). A felhőszolgáltatás-szerepkörök elfoglalt állapotban vannak a keretrendszer telepítése közben. Ha a keretrendszer telepítése újraindítást igényel, a szolgáltatásszerepkörök is újraindulhatnak.

Következő lépések