أدوار 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، اختر الإصدار الذي تريد تثبيته:

لإضافة المثبت لدور شبكة الإنترنت:

  1. في «Solution Explorer» ، ضمن «Roles» في مشروع الخدمة السحابية، انقر بزر الماوس الأيمن فوق دور الويب وحدد «Add»>مجلد جديد. ثم أنشئ مجلدًا باسم bin.
  2. انقر بزر الماوس الأيمن فوق مجلد سلة المهملات وحدد «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.

  1. إضافة المحتوى التالي إلى ملف 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 المشتركة.

  2. إنشاء ملف مسمى 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
    
  3. إضافة ملف 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 إذا لم تكن مثبتة بالفعل. تكون أدوار الخدمة السحابية في حالة الانشغال أثناء تثبيت إطار العمل. إذا كان تثبيت إطار العمل يتطلب إعادة تشغيل، قد يتم أيضًا إعادة تشغيل أدوار الخدمة.

الموارد الإضافية