Azure Cloud Services (klasik) rollerine .NET yükleme
Önemli
Cloud Services (klasik), 1 Eylül 2024 itibarıyla tüm müşteriler için kullanım dışı bırakılmıştır. Mevcut tüm çalışan dağıtımlar Microsoft tarafından durdurulacak ve kapatılacak ve Veriler Ekim 2024'den itibaren kalıcı olarak kaybolacaktı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çıklanmaktadı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, .NET Framework 4.6'nın herhangi bir sürümüyle birlikte gelmeyen Konuk İşletim Sistemi ailesi 4'e yükleyebilirsiniz. (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 sürümü 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 ve Yeni Klasör Ekle'yi>seçin. Bin adlı bir klasör oluşturun.
- Bölme klasörüne sağ tıklayın ve Varolan Öğ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üzü sağ tıklatın ve Varolan Öğeyi Ekle'yi>seçin. .NET yükleyicisini seçin ve role ekleyin.
Dosyalar rol içerik 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 .NET Framework 4.6'yi 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 üzerinde .NET Framework 4.6 yüklüyse .NET uygulamalarınızı çalıştırdığınızda sorunlar oluşabilir. Bu sorunlardan kaçınmak 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şlatma 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ında 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 yönetici ayrıcalıklarıyla konsol komutunu
install.cmd
çalıştırır. Yapılandırma ayrıca NETFXInstall adlı bir LocalStorage öğesi de oluşturur. Başlangıç betiği, geçici klasörü 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 . Common 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 makinenizde belirtilen .NET Framework sürümünün bulunup bulunmadığı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ıyorsanız, dosya yine de UTF-8 bayt sırası 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şlemesi 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 makalenin önceki bölümlerinde açıklandığı gibi Çözüm Gezgini'da Varolan Öğe Ekle'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ı rolüne uzak masaüstü yapmak 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, NETFX'teki günlük dizinindeki dosyaları netfx-install blob kapsayıcısında Tanılama depolama hesabına aktarmak için Tanılama'yı yapılandırır.
Bulut hizmetinizi dağıtma
Bulut hizmetinizi dağıttığınızda, başlangıç görevleri .NET Framework'ü yükler (gerekirse). Ç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.