Menginstal .NET di peran Azure Cloud Services (klasik)
Penting
Cloud Services (klasik) sekarang tidak lagi digunakan untuk pelanggan baru dan akan dihentikan untuk semua pelanggan pada 31 Agustus 2024. Penyebaran baru sebaiknya menggunakan Azure Resource Manager yang baru berdasarkan model penyebaran Azure Cloud Services (dukungan tambahan) .
Artikel ini menjelaskan cara menginstal versi .NET Framework yang tidak dilengkapi dengan OS Tamu Azure. Anda dapat menggunakan .NET pada OS Tamu untuk mengonfigurasi peran web dan pekerja layanan awan Anda.
Misalnya, Anda dapat menginstal .NET Framework 4.6.2 pada keluarga OS Tamu 4, yang tidak dilengkapi dengan rilis .NET Framework 4.6. (Keluarga OS Tamu 5 dilengkapi dengan .NET Framework 4.6.) Untuk informasi terbaru tentang rilis OS Tamu Azure, lihat berita rilis Azure Guest OS.
Penting
Azure SDK 2.9 berisi pembatasan penerapan .NET Framework 4.6 pada keluarga OS Tamu 4 atau versi lebih lama. Perbaikan untuk pembatasan tersedia di azure-cloud-services-files
repositori GitHub.
Untuk menginstal .NET di peran web dan pekerja Anda, sertakan alat penginstal web .NET sebagai bagian dari proyek layanan awan Anda. Mulai alat penginstal sebagai bagian dari tugas startup peran.
Menambahkan alat penginstal .NET ke proyek Anda
Untuk mengunduh alat penginstal web untuk .NET Framework, pilih versi yang ingin Anda pasang:
- .NET Framework penginstal web 4.8.1
- Alat penginstal Web .NET Framework 4.8
- Alat penginstal web .NET Framework 4.7.2
- Alat penginstal web .NET Framework 4.6.2
Untuk menambahkan penginstal untuk peran web:
- Di Penjelajah Solusi, di bawah Peran dalam proyek layanan awan Anda, klik kanan pada peran web Anda dan pilih Tambahkan>Folder Baru. Membuat folder bernama bin.
- Klik kanan folder bin dan pilih Tambahkan>Item yang Ada. Pilih alat penginstal .NET dan tambahkan ke folder bin.
Untuk menambahkan alat penginstal untuk peran pekerja:
- Klik kanan peran pekerja Anda dan pilih Tambahkan>Item yang Ada. Pilih alat penginstal .NET dan tambahkan ke peran.
Saat file ditambahkan dengan cara ini ke folder konten peran, file secara otomatis ditambahkan ke paket layanan awan Anda. File kemudian disebarkan ke lokasi yang konsisten pada komputer virtual. Ulangi proses ini untuk setiap peran web dan pekerja di layanan awan Anda sehingga semua peran memiliki salinan alat penginstal.
Catatan
Anda harus menginstal .NET Framework 4.6.2 pada peran layanan awan Anda bahkan jika aplikasi Anda menargetkan .NET Framework 4.6. OS Tamu mencakup pembaruan 3098779 dan pembaruan 3097997 Pangkalan Pengetahuan. Masalah dapat terjadi ketika Anda menjalankan aplikasi .NET Anda jika .NET Framework 4.6 dipasang di atas pembaruan Pangkalan Pengetahuan. Untuk menghindari masalah ini, pasang .NET Framework 4.6.2 daripada versi 4.6. Untuk informasi selengkapnya, lihat artikel Pangkalan Pengetahuan 3118750 dan 4340191.
Menentukan tugas startup untuk peran Anda
Anda bisa menggunakan tugas startup untuk melakukan operasi sebelum peran dimulai. Menginstal .NET Framework sebagai bagian dari tugas startup memastikan bahwa kerangka kerja diinstal sebelum kode aplikasi apa pun dijalankan. Untuk informasi selengkapnya tentang tugas startup, lihat Menjalankan tugas startup di Azure.
Tambahkan konten berikut ke file ServiceDefinition.csdef di bawah node WebRole atau WorkerRole untuk semua peran:
<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>
Konfigurasi sebelumnya menjalankan perintah konsol
install.cmd
dengan hak administrator untuk menginstal .NET Framework. Konfigurasi ini juga membuat elemen LocalStorage bernama NETFXInstall. Skrip startup menetapkan folder sementara untuk menggunakan sumber daya penyimpanan lokal ini.Penting
Untuk memastikan penginstalan kerangka kerja yang benar, atur ukuran sumber daya ini menjadi setidaknya 1.024 MB.
Untuk informasi selengkapnya tentang tugas startup, lihat Tugas Umum Startup Azure Cloud Services.
Buat file bernama install.cmd dan tambahkan skrip penginstalan berikut ke file.
Skrip memeriksa apakah versi yang ditentukan dari .NET Framework sudah diinstal pada mesin dengan menanyakan registri. Jika versi .NET Framework tidak diinstal, maka alat penginstal web .NET Framework dibuka. Untuk membantu memecahkan masalah apa pun, skrip mencatat semua aktivitas ke file startuptasklog-(tanggal dan waktu saat ini).txt yang disimpan di penyimpanan lokal InstallLogs.
Penting
Gunakan editor teks dasar seperti Windows Notepad untuk membuat file install.cmd. Jika Anda menggunakan Visual Studio untuk membuat file teks dan mengubah ekstensi menjadi .cmd, file mungkin masih berisi tanda urutan byte UTF-8. Tanda ini dapat menyebabkan kesalahan ketika baris pertama skrip dijalankan. Untuk menghindari kesalahan ini, buat baris pertama skrip pernyataan REM yang dapat dilewati oleh pemrosesan urutan byte.
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
Tambahkan file install.cmd ke setiap peran dengan menggunakan Tambahkan>Item yang Sudah Ada di Penjelajah Solusi seperti yang dijelaskan sebelumnya dalam topik ini.
Setelah langkah ini selesai, semua peran harus memiliki file alat penginstal .NET dan file install.cmd.
Mengonfigurasi Diagnostik untuk mentransfer log startup ke penyimpanan Blob
Untuk menyederhanakan pemecahan masalah penginstalan, Anda dapat mengonfigurasi Diagnostik Azure untuk mentransfer file log apa pun yang dihasilkan oleh skrip startup atau alat penginstal .NET ke penyimpanan Azure Blob. Dengan menggunakan pendekatan ini, Anda dapat melihat log dengan mengunduh file log dari penyimpanan Blob daripada harus menggunakan desktop jauh ke dalam peran.
Untuk mengonfigurasi Diagnostik, buka file diagnostics.wadcfgx dan tambahkan konten berikut di bawah node Direktori:
<DataSources>
<DirectoryConfiguration containerName="netfx-install">
<LocalResource name="NETFXInstall" relativePath="log"/>
</DirectoryConfiguration>
</DataSources>
XML ini mengonfigurasi Diagnostik untuk mentransfer file dalam direktori log di sumber daya NETFXInstall ke akun penyimpanan Diagnostik di kontainer bolb netfx-install.
Menerapkan layanan awan Anda
Saat Anda menerapkan layanan awan Anda, tugas startup menginstal .NET Framework jika belum diinstal. Peran layanan awan Anda berada dalam kondisi sibuk saat kerangka kerja sedang diinstal. Jika penginstalan kerangka kerja memerlukan mulai ulang, peran layanan mungkin juga dimulai ulang.