Share via


Azure Cloud Services (klasik) rollerine .NET yükleme

Önemli

Cloud Services (klasik) artık yeni müşteriler için kullanımdan kaldırılmıştır ve tüm müşteriler için 31 Ağustos 2024'te kullanımdan kaldırılacaktır. Yeni dağıtımlarda yeni Azure Resource Manager tabanlı dağıtım modeli Azure Cloud Services (genişletilmiş destek) kullanılmalıdır.

Bu makalede, Azure Konuk İşletim Sistemi ile birlikte gelmeyen .NET Framework sürümlerinin nasıl yükleneceği açıklanır. Bulut hizmeti web ve çalışan rollerinizi yapılandırmak için Konuk İşletim Sistemi'nde .NET kullanabilirsiniz.

Örneğin, .NET Framework 4.6.2'yi Konuk İşletim Sistemi ailesi 4'e yükleyebilirsiniz; bu sürüm .NET Framework 4.6'nın herhangi bir sürümüyle birlikte gelmez. (Konuk işletim sistemi ailesi 5, .NET Framework 4.6 ile birlikte gelir.) Azure Konuk İşletim Sistemi sürümleri hakkında en son bilgiler için bkz. Azure Konuk İşletim Sistemi yayın haberleri.

Önemli

Azure SDK 2.9, Konuk İşletim Sistemi ailesi 4 veya önceki sürümlerde .NET Framework 4.6 dağıtımına yönelik bir kısıtlama içerir. Kısıtlamaya yönelik bir düzeltme GitHub deposunda mevcutturazure-cloud-services-files.

.NET'i web ve çalışan rollerinize yüklemek için bulut hizmeti projenizin bir parçası olarak .NET web yükleyicisini ekleyin. Rolün başlangıç görevlerinin bir parçası olarak yükleyiciyi başlatın.

.NET yükleyicisini projenize ekleme

.NET Framework web yükleyicisini indirmek için yüklemek istediğiniz sürümü seçin:

Bir web rolünün yükleyicisini eklemek için:

  1. Çözüm Gezgini'da, bulut hizmeti projenizdeki roller'in altında web rolünüze sağ tıklayın veYeni Klasör Ekle'yi> seçin. bin adlı bir klasör oluşturun.
  2. Bölme klasörüne sağ tıklayın veVarolan ÖğeYi Ekle'yi> seçin. .NET yükleyicisini seçin ve bin klasörüne ekleyin.

Çalışan rolünün yükleyicisini eklemek için:

  • Çalışan rolünüze sağ tıklayın veVarolan ÖğeYi Ekle'yi> seçin. .NET yükleyicisini seçin ve role ekleyin.

Dosyalar rol içeriği klasörüne bu şekilde eklendiğinde otomatik olarak bulut hizmeti paketinize eklenir. Dosyalar daha sonra sanal makinede tutarlı bir konuma dağıtılır. Tüm rollerin yükleyicinin bir kopyasına sahip olması için bulut hizmetinizdeki her web ve çalışan rolü için bu işlemi yineleyin.

Not

Uygulamanız 4.6 .NET Framework hedeflese bile bulut hizmeti rolünüzde .NET Framework 4.6.2'yi yüklemeniz gerekir. Konuk işletim sistemi Bilgi Bankası güncelleştirme 3098779 ve güncelleştirme 3097997 içerir. Bilgi Bankası güncelleştirmelerinin üzerine .NET Framework 4.6 yüklüyse .NET uygulamalarınızı çalıştırdığınızda sorunlar oluşabilir. Bu sorunları önlemek için sürüm 4.6 yerine .NET Framework 4.6.2'yi yükleyin. Daha fazla bilgi için 3118750 ve 4340191 Bilgi Bankası makalesine bakın.

Yükleyici dosyalarıyla rol içeriği

Rolleriniz için başlangıç görevlerini tanımlama

Bir rol başlamadan önce işlemleri gerçekleştirmek için başlangıç görevlerini kullanabilirsiniz. .NET Framework başlangıç görevinin bir parçası olarak yüklemek, herhangi bir uygulama kodu çalıştırilmeden önce çerçevenin yüklenmesini sağlar. Başlangıç görevleri hakkında daha fazla bilgi için bkz. Azure'da başlangıç görevlerini çalıştırma.

  1. Tüm roller için WebRole veya WorkerRole düğümü altındaki ServiceDefinition.csdef dosyasına aşağıdaki içeriği ekleyin:

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

    Yukarıdaki yapılandırma, .NET Framework yüklemek için konsol komutunu install.cmd yönetici ayrıcalıklarıyla çalıştırır. Yapılandırma ayrıca NETFXInstall adlı bir LocalStorage öğesi oluşturur. Başlangıç betiği, temp klasörünü bu yerel depolama kaynağını kullanacak şekilde ayarlar.

    Önemli

    Çerçevenin doğru yüklenmesini sağlamak için bu kaynağın boyutunu en az 1.024 MB olarak ayarlayın.

    Başlangıç görevleri hakkında daha fazla bilgi için bkz. Yaygın Azure Cloud Services başlangıç görevleri.

  2. install.cmd adlı bir dosya oluşturun ve aşağıdaki yükleme betiğini dosyaya ekleyin.

    Betik, kayıt defterini sorgulayarak .NET Framework belirtilen sürümünün makinede zaten yüklü olup olmadığını denetler. .NET Framework sürümü yüklü değilse, .NET Framework web yükleyicisi açılır. Betik, sorunları gidermeye yardımcı olmak için tüm etkinlikleri InstallLogs yerel depolama alanında depolanan startuptasklog-(geçerli tarih ve saat).txt kaydeder.

    Önemli

    Install.cmd dosyasını oluşturmak için Windows Not Defteri gibi temel bir metin düzenleyicisi kullanın. Metin dosyası oluşturmak ve uzantıyı .cmd olarak değiştirmek için Visual Studio kullanırsanız, dosya yine de UTF-8 bayt sıra işareti içerebilir. Bu işaret, betiğin ilk satırı çalıştırıldığında hataya neden olabilir. Bu hatayı önlemek için betiğin ilk satırını bayt sırası işleme tarafından atlanabilir bir REM deyimi yapın.

    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. Bu konunun önceki bölümlerinde açıklandığı gibi Çözüm Gezgini'deVarolan ÖğeEkle'yi> kullanarak install.cmd dosyasını her role ekleyin.

    Bu adım tamamlandıktan sonra, tüm roller .NET yükleyici dosyasına ve install.cmd dosyasına sahip olmalıdır.

    Tüm dosyalara sahip rol içeriği

Başlangıç günlüklerini Blob depolamaya aktarmak için Tanılamayı yapılandırma

Yükleme sorunlarını gidermeyi basitleştirmek için, Azure Tanılama başlangıç betiği veya .NET yükleyicisi tarafından oluşturulan günlük dosyalarını Azure Blob depolamaya aktaracak şekilde yapılandırabilirsiniz. Bu yaklaşımı kullanarak, günlük dosyalarını rolde uzak masaüstü kullanmak yerine Blob depolamadan indirerek günlükleri görüntüleyebilirsiniz.

Tanılamayı yapılandırmak için diagnostics.wadcfgx dosyasını açın ve Dizinler düğümü altına aşağıdaki içeriği ekleyin:

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

Bu XML, TANıLAMA'yı NETFX'teki günlük dizinindeki dosyaları netfx-install blob kapsayıcısında Tanılama depolama hesabına aktaracak şekilde yapılandırır.

Bulut hizmetinizi dağıtma

Bulut hizmetinizi dağıttığınızda, başlangıç görevleri henüz yüklü değilse .NET Framework yükler. Çerçeve yüklenirken bulut hizmeti rolleriniz meşgul durumdadır. Çerçeve yüklemesi yeniden başlatma gerektiriyorsa, hizmet rolleri de yeniden başlatabilir.

Ek kaynaklar