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:
- .NET Framework 4.8.1 web yükleyicisi
- .NET Framework 4.8 Web yükleyicisi
- .NET Framework 4.7.2 web yükleyicisi
- .NET Framework 4.6.2 web yükleyicisi
Bir web rolünün yükleyicisini eklemek için:
- Çö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.
- 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.
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.
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.
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
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.
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.