Installieren von .NET in Rollen in Azure Cloud ServicesInstall .NET on Azure Cloud Services roles

Dieser Artikel beschreibt die Installation von .NET Framework-Versionen, die nicht im Funktionsumfang des Azure-Gastbetriebssystems vorhanden sind.This article describes how to install versions of .NET Framework that don't come with the Azure Guest OS. Sie können .NET im Gastbetriebssystem zum Konfigurieren Ihrer Clouddienstweb- und -workerrollen nutzen.You can use .NET on the Guest OS to configure your cloud service web and worker roles.

Sie können .NET 4.6.2 für die Gastbetriebssystemfamilie 4 installieren, die keine Version von .NET 4.6 enthält.For example, you can install .NET 4.6.2 on the Guest OS family 4, which doesn't come with any release of .NET 4.6. (Die Gastbetriebssystemfamilie 5 ist hingegen in .NET 4.6 enthalten.) Aktuelle Informationen zu Versionen von Azure-Gastbetriebssystemversionen finden Sie unter Neuigkeiten zur Version des Azure-Gastbetriebssystems.(The Guest OS family 5 does come with .NET 4.6.) For the latest information on the Azure Guest OS releases, see the Azure Guest OS release news.

Wichtig

Das Azure SDK 2.9 weist eine Einschränkung für die Bereitstellung von .NET 4.6 in Gastbetriebssystemfamilien bis Version 4 auf.The Azure SDK 2.9 contains a restriction on deploying .NET 4.6 on the Guest OS family 4 or earlier. Eine Lösung zum Beseitigen dieser Einschränkung finden Sie auf der Website mit der Microsoft-Dokumentation.A fix for the restriction is available on the Microsoft Docs site.

Zum Installieren von .NET für Ihre Web- und Workerrollen fügen Sie Ihrem Clouddienstprojekt den .NET-Webinstaller hinzu.To install .NET on your web and worker roles, include the .NET web installer as part of your cloud service project. Starten Sie den Installer im Rahmen der Startaufgaben der Rolle.Start the installer as part of the role's startup tasks.

Das Installationsprogramm für .NET zu Ihrem Projekt hinzufügenAdd the .NET installer to your project

Laden Sie den Webinstaller der .NET Framework-Version herunter, die Sie installieren möchten:To download the web installer for the .NET Framework, choose the version that you want to install:

So fügen Sie den Installer für eine Webrolle hinzuTo add the installer for a web role:

  1. Klicken Sie im Projektmappen-Explorer im Clouddienstprojekt unter Rollen mit der rechten Maustaste auf Ihre Webrolle, und wählen Sie Hinzufügen > Neuer Ordner aus.In Solution Explorer, under Roles in your cloud service project, right-click your web role and select Add > New Folder. Erstellen Sie einen Ordner mit dem Namen bin.Create a folder named bin.
  2. Klicken Sie mit der rechten Maustaste auf den Ordner „bin“, und wählen Sie Hinzufügen > Vorhandenes Element aus.Right-click the bin folder and select Add > Existing Item. Wählen Sie das Installationsprogramm für .NET aus und fügen Sie es dem Ordner "Bin" hinzu.Select the .NET installer and add it to the bin folder.

So fügen Sie den Installer für eine Workerrolle hinzuTo add the installer for a worker role:

  • Klicken Sie mit der rechten Maustaste auf Ihre Workerrolle, und wählen Sie Hinzufügen > Vorhandenes Element aus.Right-click your worker role and select Add > Existing Item. Wählen Sie das Installationsprogramm für .NET aus und fügen Sie zur Rolle hinzu.Select the .NET installer and add it to the role.

Wenn Dateien auf diese Weise dem Inhaltsordner für die Rolle hinzugefügt werden, werden sie automatisch Ihrem Clouddienstpaket hinzugefügt.When files are added in this way to the role content folder, they're automatically added to your cloud service package. Die Dateien werden dann in einem einheitlichen Speicherort auf dem virtuellen Computer bereitgestellt.The files are then deployed to a consistent location on the virtual machine. Wiederholen Sie diesen Vorgang für alle Web- und Workerrollen in Ihrem Clouddienst, sodass alle Rollen über eine Kopie des Installers verfügen.Repeat this process for each web and worker role in your cloud service so that all roles have a copy of the installer.

Hinweis

Sie müssen .NET 4.6.2 für Ihre Clouddienstrolle installieren, selbst wenn Ihre Anwendung .NET 4.6 verwendet.You should install .NET 4.6.2 on your cloud service role even if your application targets .NET 4.6. Das Gastbetriebssystem enthält Update 3098779 und Update 3097997 aus der Knowledge Base.The Guest OS includes the Knowledge Base update 3098779 and update 3097997. Probleme beim Ausführen Ihrer .NET-Anwendungen können auftreten, wenn .NET 4.6 über die Knowledge Base-Updates installiert wird.Issues can occur when you run your .NET applications if .NET 4.6 is installed on top of the Knowledge Base updates. Um diese Probleme zu vermeiden, installieren Sie .NET 4.6.2 anstelle von Version 4.6.To avoid these issues, install .NET 4.6.2 rather than version 4.6. Weitere Informationen finden Sie in den Knowledge Base-Artikeln 3118750 und 4340191.For more information, see the Knowledge Base article 3118750 and 4340191.

Inhalte der Rolle mit Installerdateien

Definieren von Startaufgaben für Ihre RollenDefine startup tasks for your roles

Mit Startaufgaben können Sie Vorgänge ausführen, bevor eine Rolle gestartet wird.You can use startup tasks to perform operations before a role starts. Die Installation von .NET Framework als Teil der Startaufgabe stellt sicher, dass das Framework installiert ist, bevor Anwendungscode ausgeführt wird.Installing the .NET Framework as part of the startup task ensures that the framework is installed before any application code is run. Weitere Informationen zu Startaufgaben finden Sie unter Ausführen von Startaufgaben in Azure.For more information on startup tasks, see Run startup tasks in Azure.

  1. Fügen Sie der Datei „ServiceDefinition.csdef“ unter dem Knoten WebRole oder WorkerRole für alle Rollen folgenden Inhalt hinzu:Add the following content to the ServiceDefinition.csdef file under the WebRole or WorkerRole node for all roles:

    <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>
    

    Die oben genannte Konfiguration führt den Konsolenbefehl install.cmd mit Administratorrechten aus, um .NET Framework zu installieren.The preceding configuration runs the console command install.cmd with administrator privileges to install the .NET Framework. Über die Konfiguration wird auch ein LocalStorage-Element mit dem Namen NETFXInstall erstellt.The configuration also creates a LocalStorage element named NETFXInstall. Das Startskript aktiviert den temporären Ordner zur Verwendung der lokalen Speicherressource.The startup script sets the temp folder to use this local storage resource.

    Wichtig

    Um die ordnungsgemäße Installation des Frameworks sicherzustellen, legen Sie die Größe dieser Ressource auf mindestens 1.024 MB fest.To ensure correct installation of the framework, set the size of this resource to at least 1,024 MB.

    Weitere Informationen zu Startaufgaben finden Sie unter Allgemeine Startaufgaben für Azure Cloud Services.For more information about startup tasks, see Common Azure Cloud Services startup tasks.

  2. Erstellen Sie eine Datei mit dem Namen install.cmd, und fügen Sie ihr das folgende Installationsskript hinzu.Create a file named install.cmd and add the following install script to the file.

    Das Skript überprüft, ob die angegebene .NET-Framework-Version bereits auf dem Computer installiert ist, indem die Registrierung abgefragt wird.The script checks whether the specified version of the .NET Framework is already installed on the machine by querying the registry. Wenn die .NET-Version nicht installiert ist, wird der .NET-Webinstaller geöffnet.If the .NET version is not installed, then the .NET web installer is opened. Zur Unterstützung der Problembehandlung protokolliert das Skript alle Aktivitäten in einer Datei mit dem Namen „startuptasklog-(aktuelles Datum mit Uhrzeit).txt“, die unter InstallLogs lokal gespeichert ist.To help troubleshoot any issues, the script logs all activity to the file startuptasklog-(current date and time).txt that is stored in InstallLogs local storage.

    Wichtig

    Erstellen Sie die Datei „install.cmd“ in einem einfachen Texteditor wie Windows-Editor.Use a basic text editor like Windows Notepad to create the install.cmd file. Wenn Sie eine Textdatei mit Visual Studio erstellen und die Erweiterung in „.cmd“ ändern, kann die Datei immer noch eine UTF-8-Bytereihenfolge-Marke enthalten.If you use Visual Studio to create a text file and change the extension to .cmd, the file might still contain a UTF-8 byte order mark. Diese Marke kann einen Fehler verursachen, wenn die erste Zeile des Skripts ausgeführt wird.This mark can cause an error when the first line of the script is run. Um diesen Fehler zu vermeiden, versehen Sie die erste Zeile des Skripts mit einer REM-Anweisung, die von der Bytereihenfolgenverarbeitung übersprungen werden kann.To avoid this error, make the first line of the script a REM statement that can be skipped by the byte order processing.

    REM Set the value of netfx to install appropriate .NET Framework. 
    REM ***** To install .NET 4.5.2 set the variable netfx to "NDP452" *****
    REM ***** To install .NET 4.6 set the variable netfx to "NDP46" *****
    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://www.microsoft.com/download/details.aspx?id=53345
    REM ***** To install .NET 4.7 set the variable netfx to "NDP47" ***** 
    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
    set netfx="NDP472"
    REM ***** To install .NET 4.8 set the variable netfx to "NDP48" ***** https://dotnet.microsoft.com/download/thank-you/net48
    
    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%=="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"
    goto logtimestamp
    
    :NDP46
    set "netfxinstallfile=NDP46-KB3045560-Web.exe"
    set netfxregkey="0x6004f"
    goto logtimestamp
    
    :NDP461
    set "netfxinstallfile=NDP461-KB3102438-Web.exe"
    set netfxregkey="0x6040e"
    goto logtimestamp
    
    :NDP462
    set "netfxinstallfile=NDP462-KB3151802-Web.exe"
    set netfxregkey="0x60632"
    goto logtimestamp
    
    :NDP47
    set "netfxinstallfile=NDP47-KB3186500-Web.exe"
    set netfxregkey="0x707FE"
    goto logtimestamp
    
    :NDP471
    set "netfxinstallfile=NDP471-KB4033344-Web.exe"
    set netfxregkey="0x709fc"
    goto logtimestamp
    
    :NDP472
    set "netfxinstallfile=NDP472-KB4054531-Web.exe"
    set netfxregkey="0x70BF6"
    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 ***** 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. Fügen Sie jeder Rolle die Datei „install.cmd“ durch Aufrufen von Hinzufügen > Vorhandenes Element im Projektmappen-Explorer hinzu (siehe die Beschreibung weiter oben).Add the install.cmd file to each role by using Add > Existing Item in Solution Explorer as described earlier in this topic.

    Nach diesem Schritt sollten alle Rollen über die .NET-Installerdateien und die Datei „install.cmd“ verfügen.After this step is complete, all roles should have the .NET installer file and the install.cmd file.

    Inhalte der Rolle mit allen Dateien

Konfigurieren der Diagnose zur Übertragung der Startaufgabenprotokolle in BlobspeicherConfigure Diagnostics to transfer startup logs to Blob storage

Zur Vereinfachung der Problembehandlung können Sie die Azure-Diagnose so konfigurieren, dass Protokolldateien, die vom Startskript oder .NET-Installer erstellt wurden, in Azure Blob Storage übertragen werden.To simplify troubleshooting installation issues, you can configure Azure Diagnostics to transfer any log files generated by the startup script or the .NET installer to Azure Blob storage. Bei Wahl dieser Vorgehensweise können Sie die Protokolle anzeigen, indem Sie die Protokolldateien aus dem Blobspeicher herunterladen, anstatt sich per Remotedesktop bei der Rolle anzumelden.By using this approach, you can view the logs by downloading the log files from Blob storage rather than having to remote desktop into the role.

Öffnen Sie zur Konfiguration der Diagnose die Datei „diagnostics.wadcfgx“, und fügen Sie unter dem Knoten Directories folgenden Inhalt hinzu:To configure Diagnostics, open the diagnostics.wadcfgx file and add the following content under the Directories node:

<DataSources>
 <DirectoryConfiguration containerName="netfx-install">
  <LocalResource name="NETFXInstall" relativePath="log"/>
 </DirectoryConfiguration>
</DataSources>

Dieser XML-Code dient zum Konfigurieren der Diagnose zur Übertragung der Dateien im Protokollverzeichnis in der Ressource NETFXInstall in das Diagnosespeicherkonto des Blobcontainers netfx-install.This XML configures Diagnostics to transfer the files in the log directory in the NETFXInstall resource to the Diagnostics storage account in the netfx-install blob container.

Bereitstellen des ClouddienstsDeploy your cloud service

Wenn Sie Ihren Clouddienst bereitstellen, installieren die Startaufgaben .NET Framework, sofern es nicht bereits installiert ist.When you deploy your cloud service, the startup tasks install the .NET Framework if it's not already installed. Ihre Clouddienstrollen haben, während das Framework installiert wird, den Status Ausgelastet.Your cloud service roles are in the busy state while the framework is being installed. Wenn die Installation des Frameworks einen Neustart erfordert, werden möglicherweise die Dienstrollen auch neu gestartet.If the framework installation requires a restart, the service roles might also restart.

Zusätzliche RessourcenAdditional resources