أدوار Install .NET على Azure Cloud Services (تقليدية)
هام
تم الآن إهمال Cloud Services (كلاسيكي) للعملاء الجدد وسيتم استبعادها في 31 أغسطس 2024 لجميع العملاء. ينبغي أن تستخدم عمليات النشر الجديدة نموذج النشر الجديد القائم على Azure Resource Manager Azure Cloud Services (الدعم الموسع) .
توضح هذه المقالة كيفية تثبيت إصدارات .NET Framework التي لا تُرفق مع نظام التشغيل Guest Azure. يمكنك استخدام .NET على نظام التشغيل Guest لتكوين شبكة الإنترنت لخدمة السحابة وأدوار العامل.
على سبيل المثال، يمكنك تثبيت .NET Framework 4.6.2 على 4 عائلة نظام تشغيل Guest والتي لا ترفق مع أي إصدار من .NET Framework 4.6. لا تُرفق عائلة نظام تشغيل Guest مع .NET Framework 4.6، ولأحدث المعلومات بشأن إصدارات نظام تشغيل Azure Guest، راجع أخبار إصدار نظام تشغيل Azure Guest.
هام
يحتوي Azure SDK 2.9 قيد على نشر .NET Framework 4.6 على عائلة نظام تشغيل Guest 4 أو إصدار سابق. يتوفر تصحيح للقيد في azure-cloud-services-files
مستودع GitHub.
لتثبيت .NET على الويب وأدوار العامل، قم بتضمين مثبت شبكة الإنترنت .NET كجزء من مشروع خدمة السحابة. بدء المثبت كجزء من مهام بدء التشغيل الخاصة بالدور.
إضافة المثبت .NET على مشروعك
لتنزيل مثبت ويب .NET Framework، اختر الإصدار الذي تريد تثبيته:
- .NET Framework مثبت ويب 4.8.1
- مثبت .NET Framework 4.8 Web
- مثبت .NET Framework 4.7.2 Web
- مثبت .NET Framework 4.6.2 Web
لإضافة المثبت لدور شبكة الإنترنت:
- في «Solution Explorer» ، ضمن «Roles» في مشروع الخدمة السحابية، انقر بزر الماوس الأيمن فوق دور الويب وحدد «Add»>مجلد جديد. ثم أنشئ مجلدًا باسم bin.
- انقر بزر الماوس الأيمن فوق مجلد سلة المهملات وحدد «Add»>عنصر موجود. حدد «.NET installer» ثم إضافته إلى المجلد سلة المهملات.
لإضافة المثبت لدور العامل:
- انقر بزر الماوس الأيمن على دورالعاملوحدد «Add»>عنصر موجود. حدد «.NET installer» ثم إضافته إلى الدور.
عند إضافة الملفات بهذه الطريقة إلى مجلد محتوى الدور، تتم إضافتها تلقائيًّا إلى حزمة الخدمة السحابية. ثم يتم نشر الملفات إلى موقع متناسق على الجهاز الظاهري. كرر هذه العملية لكل دور ويب وعامل في خدمة السحابة بحيث يكون لدى جميع الأدوار نسخة من المثبت.
ملاحظة
يجب تثبيت .NET Framework 4.6.2 على دور خدمة السحابة حتى إذا كان التطبيق الخاص بك يستهدف .NET Framework 4.6. يتضمن نظام التشغيل Guest تحديث قاعدة المعارف 3098779وتحديث 3097997. يمكن أن تحدث مشكلات عند تشغيل تطبيقات .NET إذا تم تثبيت .NET Framework 4.6 على أعلى تحديثات قاعدة المعارف. لتجنب هذه المشكلات، قم بتثبيت .NET Framework 4.6.2 بدلًا من الإصدار 4.6. لمزيد من المعلومات، راجع مقالة قاعدة المعارف 3118750و 4340191.
تحديد مهام بدء تشغيل أدوارك
يمكنك استخدام مهام بدء التشغيل لتنفيذ العمليات قبل بدء الدور. تثبيت .NET Framework كجزء من مهمة بدء التشغيل يضمن تثبيت إطار العمل قبل تشغيل أي تعليمة برمجية للتطبيق. لمزيد من المعلومات حول مهام بدء التشغيل، راجع «Run» مهام بدء التشغيل في Azure.
إضافة المحتوى التالي إلى ملف ServiceDefinition.csdef ضمن عقدة WebRole أو WorkerRole لكافة الأدوار:
<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>
يقوم التكوين السابق بتشغيل أمر وحدة التحكم
install.cmd
مع امتيازات المسؤول لتثبيت .NET Framework. يقوم التكوين أيضًا بإنشاء عنصر LocalStorage المسمى NETFXInstall. يقوم البرنامج النصي لبدء التشغيل بتعيين المجلد المؤقت لاستخدام مورد التخزين المحلي.هام
لضمان التثبيت الصحيح للإطار، قم بتعيين حجم هذا المورد إلى 1024 ميغابايت على الأقل.
لمزيد من المعلومات حول مهام بدء التشغيل، راجع مهام بدء تشغيل Azure Cloud Services المشتركة.
إنشاء ملف مسمى install.cmd وإضافة البرنامج النصي التثبيت التالي إلى الملف.
يتحقق البرنامج النصي ما إذا كان الإصدار المحدد من .NET Framework مثبتًا بالفعل على الجهاز عن طريق الاستعلام عن التسجيل. إذا لم يتم تثبيت إصدار .NET Framework، يتم فتح مثبت شبكة الإنترنت .NET Framework. للمساعدة في استكشاف أية مشكلات، يقوم البرنامج النصي بتسجيل كافة الأنشطة إلى ملف startuptasklog-(current date and time).txt المخزنة في التخزين المحلي InstallLogs.
هام
استخدم محرر نص أساسي مثل Windows Notepad لإنشاء ملف install.cmd. إذا كنت تستخدم Visual Studio لإنشاء ملف نصي وتغيير الملحق إلى .cmd، لا يزال الملف يحتوي على علامة ترتيب وحدات البايت UTF-8. يمكن أن تتسبب هذه العلامة في حدوث خطأ عند تشغيل السطر الأول من البرنامج النصي. لتجنب هذا الخطأ، جعل السطر الأول من البرنامج النصي عبارة REM التي يمكن تخطيها بواسطة معالجة ترتيب وحدات البايت.
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
إضافة ملف install.cmd إلى كل دور باستخدام «Add»>عنصر موجود في «Solution Explorer» كما هو موضح سابقًا في هذا الموضوع.
بعد اكتمال هذه الخطوة، يجب أن يكون لكافة الأدوار ملف مثبت .NET وملف install.cmd.
تكوين التشخيصات لنقل سجلات بدء التشغيل إلى تخزين Blob
لتبسيط مشاكل استكشاف مشكلات التثبيت وإصلاحها، يمكنك تكوين Azure Diagnostics لنقل أي ملفات للسجل التي تم إنشاؤها من خلال البرنامج النصي بدء التشغيل أو مثبت .NET لتخزين Azure Blob. باستخدام هذا الأسلوب، يمكنك عرض السجلات عن طريق تحميل ملفات السجل من تخزين Blob بدلًا من سطح المكتب عن بعد في الدور.
لتكوين Diagnostics، افتح ملف diagnostics.wadcfgx وإضافة المحتوى التالي ضمن عقدة «Directories»:
<DataSources>
<DirectoryConfiguration containerName="netfx-install">
<LocalResource name="NETFXInstall" relativePath="log"/>
</DirectoryConfiguration>
</DataSources>
تكوين XML Diagnostics لنقل الملفات في دليل السجل في المورد NETFXInstall إلى حساب تخزين Diagnostics في حاوية blob netfx-install.
نشر خدمتك السحابية
عند نشر خدمة السحابة، تقوم مهام بدء التشغيل بتثبيت .NET Framework إذا لم تكن مثبتة بالفعل. تكون أدوار الخدمة السحابية في حالة الانشغال أثناء تثبيت إطار العمل. إذا كان تثبيت إطار العمل يتطلب إعادة تشغيل، قد يتم أيضًا إعادة تشغيل أدوار الخدمة.
الموارد الإضافية
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ