Ako nainštalovať .NET Framework 4.6 do Azure Cloud Service

Spolu s vydaním Visual Studia 2015 vyšla aj nová verzia .NET Framework 4.6. Vývojári samoobslužných aplikačným fariem v Azure (Cloud Services Web Role/Worker Role) si hneď položili otázku:“Vytvorím aplikáciu v .NET 4.6, nasadím ju do Cloud Service, ale ako na samoobslužné/automaticky vytvorené servery vo farme dostanem .NET Framework 4.6? “ .NET Framework 4.6 totiž nie je predinštalovaný na žiadnom serverovskom operačnom systéme.

Nasledujúcim návodom naštartujete každý server aplikačnej farmy typu Web Role tak, aby sa na ňho nainštaloval .NET 4.6 ešte pred spustením aplikácie. Predprípravou je nainštalovanie Azure SDK 2.7 do Visual Studia 2015 a stiahnutie .NET 4.6 Web Installer-a na lokálny disk.

1. Vytvorte v Visual Studiu testovací projekt Cloud Services Web Role postavený nad .NET 4.6. cez menu „File/New Project/Cloud – Azure Cloud Service“ a skôr ako potvrdíte OK, zmeňte verziu frameworku na .NET 4.6.

2. Pridajte do riešenia projekt ASP.NET WebRole a potvrďte OK.

3. Z ASP.NET šablón vyberte napr. MVC.

4. Po nasadení aplikácie do Cloud Service by sme radi jednoduchým spôsobom videli, že používa .NET Framework 4.6. Preto upravte napr. HomeController.cs tak, aby metóda „Contact“ zobrazila namiesto popisu aplikácie verziu nainštalovaného .NET Frameworku. Stačí do kódu stránky, do triedy HomeController  vložiť kód z https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx zo sekcie “To find .NET Framework versions by querying the registry in code (.NET Framework 4.5 and later)” a mierne ho upraviť.

         //dekodovanie verzii podla releaseKey
        private static string CheckFor45DotVersion(int releaseKey)
        {
            if (releaseKey >= 393273)
            {
                return "4.6 RC alebo novší";
            }
            if ((releaseKey >= 379893))
            {
                return "4.5.2 alebo novší";
            }
            if ((releaseKey >= 378675))
            {
                return "4.5.1 alebo novší";
            }
            if ((releaseKey >= 378389))
            {
                return "4.5 alebo novší";
            }
            return "Nie je nainštalovaný 4.5 alebo novší";
        }

5. Upravte kód kontroléra pre Contact:

         public ActionResult Contact()
        {
            using (Microsoft.Win32.RegistryKey ndpKey = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\"))
            {
                int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release"));
                if (true)
                {
                    ViewBag.Message = "Verzia: " + CheckFor45DotVersion(releaseKey);
                }
            }
            return View();
        }
  

6. V Solution Explorer-e v Cloud Service projekte vytvorte pod zložkou Roles novú zložku s názvom "bin" .

7. Cez kontextové menu zložky „bin“ (Add>Existing Item) pridajte uložený súbor .NET 4.6 Web Installer-a .

 

8. Na nainštalovanie najnovšieho frameworku použijeme Startup úlohu, ktorá sa spustí v Azure Cloud Service ešte pred naštartovaním aplikácie. Pridajte preto do súboru ServiceDefinition.csdef do vnútra elementu <WebRole></WebRole> nasledujúci kód:

     <LocalResources>
      <LocalStorage name="InstalacnyLog" sizeInMB="5" cleanOnRoleRecycle="false" />
    </LocalResources>
    <Startup>
      <Task commandLine="instaluj.cmd" executionContext="elevated" taskType="simple">
        <Environment>
          <Variable name="CestakLogu">
            <RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='InstalacnyLog']/@path" />
          </Variable>
        </Environment>
      </Task>
    </Startup>
  

9. Pripravte si príkazovú dávku „instaluj.cmd“, na ktorú sa odkazuje Startup úloha, s obsahom nižšie. Použite pritom editor, ktorý zachová ANSI kódovanie, napr. Notepad.

set netfxinstallfile="NDP46-KB3045560-Web.exe"
set netfxregkey="0x60051"

set timehour=%time:~0,2%
set timestamp=%date:~-4,4%%date:~-10,2%%date:~-7,2%-%timehour: =0%%time:~3,2%
set startuptasklog=%CestakLogu%startuptasklog-%timestamp%.txt
set netfxinstallerlog = %CestakLogu%NetFXInstallerLog-%timestamp%
echo Log generovany do: %startuptasklog% >> %startuptasklog%
echo Kontrola ci je .NET (%netfx%) nainstalovany >> %startuptasklog%
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /v Release | Find %netfxregkey%

if %ERRORLEVEL%== 0 goto end
echo Instalujem .NET. : %netfxinstallerlog% >> %startuptasklog%
start /wait %~dp0%netfxinstallfile% /q /serialdownload /log %netfxinstallerlog% >> %startuptasklog% 2>>&1

:end
echo instaluj.cmd dokonceny: %date:~-4,4%%date:~-10,2%%date:~-7,2%-%timehour: =0%%time:~3,2% >> %startuptasklog%

  

10. Pridajte súbor “instaluj.cmd” do stromu webrole, na rovnakú úroveň, kde ste vložili inštalátor .NET 4.6. (Add>Existing Item nad zložkou „bin“.)

11. Cez kontextové menu Publish nad Cloud Service projektom nasaďte aplikáciu do Azure. Povoľte pri nasadzovaní Remote Desktop ( checkbox Enable Remote Desktop for all roles“), aby ste si mohli nainštalovanie .NET 4.6 na serveroch farmy preveriť aj priamym pripojenim a preverením logu v priečinku, do ktorého bude presmerovaný InstalacnyLog.

12. Po ukončení procesu nasadenia a naštartovaní aplikácie v cloude, prejdite na jej URL adresu a vyberte menu Contact, pretože do kontroléru tohto menu sme vložili kód na zistenie nainštalovanej verzie .NET-u.

13. .NET 4.6 sa na servery aplikačnej farmy úspešne nainštaloval!

 

Miro

 

P.S. Ak ste členmi BizSpark programu pre začínajúce vývojárske "startupy" (firmy alebo živnostníkov) , alebo máte kúpené Visual Studio s MSDN, môžete si bezplatne aktivovať Azure benefit v týchto programoch (Microsoft Azure pre členov BizSpark , Microsoft Azure pre MSDN predplatiteľov). Pri registrácii Azure benefitu v MSDN alebo BizSparku nie je požadované overenie platobnou kartou. Ak nie ste členmi týchto programov, môžete si Microsoft Azure bezplatne vyskúšať na dobu 30 dní cez Microsoft Azure Trial.