Co je to .NET Framework 4.5?

Tomáš Jecha, MVP, MCSD       04.09.2012       C#, VB.NET, Visual Studio, .NET       24782 zobrazení

V tomto článku se snažím nastínit rozdíl mezi .NET 4 a .NET 4.5 z pohledu zpětné kompatibility.

Úvod do verzí

Pro úplnost začněme u starších verzí. Verze .NET Framework 3.0 a 3.5 nainstalováním rozšířily .NET Framework 2.0 o nové funkce (WPF, WCF a podobně). Používali jeho CLR, ale víceméně jej nijak nemodifikovaly. Tyto jednotlivé verze tedy přidávaly nové knihovny, nemodifikovaly však již ty existující (když nepočítáme opravy bugů a jiné drobnosti).

.NET Framework 4.5 je na rozdíl od nich plnohodnotnou aktualizací verze .NET Framework 4 a zároveň jeho rozšířením (například podpora async/await konstrukce). Důležité tedy je, že krom nových knihoven také přidává a modifikuje funkce existujících knihoven verze 4 a to včetně jeho CLR.

Instalace .NET 4.5

Verze 4.5 se tedy neinstaluje “vedle” ostatních verzí, ale plně přes verzi 4. To je také důvod proč ve složce %WINDIR%\Microsoft.NET\Framework po instalaci nenajdete očekávanou složku v4.5 (viz obrázek).

Microsoft .NET

Hlavní knihovny .NET Framework 4.0 a následně i aktualizace na verzi 4.5 jsou instalovány do výše uvedeného adresáře do podsložky v4.030319. Podívejme se nyní na dalším obrázku na knihovnu mscorlib.dll v kopii verze před a po aktualizaci na .NET 4.5.

image

Zajímavé je, že po aktualizaci nebyla změněna verze knihovny (zůstává 4.0.30319). Na první pohled se změnilo pouze číslo sestavení a velikost souboru.

Microsoft nicméně tvrdí, že provedené změny jádra v aktualizaci na .NET 4.5 jsou plně zpětně kompatibilní a neměl by být tedy žádný problém po její instalaci dále spouštět aplikace napsané pro původní verzi 4.0.

Detekce .NET 4.5

Popsaný způsob aktualizace může způsobit (subjektivně) nečekané chování při spouštění aplikace napsané pro .NET 4.5 na systému, kde je nainstalovaný pouze .NET 4. Osobně bych čekal, že taková aplikace ve výchozím stavu nepůjde ani spustit. Opak je však pravdou a aplikace nastartuje. Pokud jste nevyužili žádnou novou funkci z verze 4.5, bude pravděpodobně i fungovat. Problém samozřejmě nastane, pokud kdekoliv uvnitř aplikace zavoláte metodu, která ve verzi 4.0 ještě neexistuje. Aplikace se v tu chvíli sesype.

Příkladem může být následující kód, který vypíše verzi knihoven .NET Frameworku a následně použije konstrukci “async/await” z .NET 4.5.

static void Main(string[] args)
{
    Console.WriteLine("Aplikace pro .NET 4.5.");
    Console.WriteLine("Aktuální verze: {0}", Environment.Version);
    Console.WriteLine("Stiskni ENTER...");
    Console.ReadLine();

    Console.WriteLine("Volám 'async' metodu.");
    SomeAsyncMethod().Wait();
    Console.ReadLine();
}

private static async Task SomeAsyncMethod()
{
    await Task.Run(() => Thread.Sleep(TimeSpan.FromSeconds(1)));
    Console.WriteLine("Metoda 'async' dokončena.");
}

Na systému s .NET 4 se aplikace spustí a spadne až ve chvíli, kdy dojde na použití “async/await”. Konkrétněji ve chvíli, kdy se snaží využít rozhraní IAsyncStateMachine (vnitřně využívané pro realizaci async konstrukcí) dostupné až v novější verzi knihovny mscorlib.dll.

.NET 4

Na systému s .NET 4.5 vše funguje jak má:

.NET 4.5

Detekce za běhu pomocí kódu

Předpokládám, že ve většině případů budeme chtít detekovat přítomnost .NET Frameworku 4.5 již při spuštění aplikace a vyvarovat se tak nečekanému pádu za běhu.

Detekce .NET 4.5 podle verze knihoven není dost dobře možná, protože se liší pouze ve verzi sestavení a to by v ideálním případě neměl být rozhodovací parametr.

Dalším možným řešením je použití reflexe a kontrola nějakého typu, který je přítomný až od verze 4.5. Například toto řešení jsem nalezl na diskusních fórech stackoverflow:

public static bool IsNet45OrNewer()
{
    // Class "ReflectionContext" exists from .NET 4.5 onwards
    return Type.GetType("System.Reflection.ReflectionContext", false) != null;
}

Další z možností, jak rozhodnout, zda je .NET 4.5 nainstalovaný je práce s registry. Takovou možnost však nemám v tuto chvíli vyzkoušenou.

Detekce při spouštění aplikace

Programová detekce kódem je vhodná především uvnitř samostatných komponent. Pokud však píšeme celou aplikaci, lze omezit potřebný .NET Framework na úrovni konfiguračního souboru. Konkrétně můžeme do App.config zapsat následující kód - což je mimochodem i výchozí stav v šablonách Visual Studia při založení konzolové aplikace:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

Po spuštění v prostředí bez .NET 4.5 se zobrazí chybová hláška a aplikace se nespustí:

.NET 4.5 message box

Obdoba pro web.config u webových aplikací je:

<configuration>
    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" />
    </system.web>
</configuration>

Pokus o spuštění takto nakonfigurované webové aplikace na serveru bez .NET 4.5 skončí s chybou.

 

hodnocení článku

0 bodů / 2 hlasů       Hodnotit mohou jen registrované uživatelé.

 

 

 

Nový příspěvek

 

Diskuse: Co je to .NET Framework 4.5?

Absencí podpory Windows XP (v současnosti ještě pořád nejrozšířenější desktopový operační systém) si Microsoft zatloukl další hřebíček do rakve. Přitom verze 4.0 s ním nemá problém.

nahlásit spamnahlásit spam -1 / 3 odpovědětodpovědět

Lidi tak snad konečně přejdou z toho prehistorického systému na něco aktuálního. Pro vývojáře to myslím bude jedině plus.

nahlásit spamnahlásit spam 1 / 3 odpovědětodpovědět

Ten prehistorický systém je již 10 let nejrozšířenější operační systém na desktopech, což svědčí o jeho kvalitách. Jaký důvod by měly například firmy přecházet na cokoliv novějšího?

Vývojářům to skutečně ulehčí práci - budou moct nadále používat stávající vývojové nástroje a technologie kompatibilní s Windows XP. Nutit zákazníky přecházet na novější systém jen z důvodu uvedení nových vývojových nástrojů je přinejmenším debilita. Týká se to samozřejmě desktopových aplikací, u webových aplikací je to úplně jedno.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Rekl bych, asi v tom budou zase a jenom prachy pro MS.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

lidi asi jo, ale firmy tezko. Kupovat license a preinstalocavat pc . Normalni firma na to nema ani cas ani penize.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Každá normální firma zhruba jednou za 5 let počítače obměňuje. Windows XP jsou tady 11 let, Visty leckdo ignoroval (přestože k tomu nebyly racionální důvody), ale sedmičky tady už jsou 3 roky. Do dvou let XP téměř zmizí, na nové počítače je skoro nikdo dávat nebude.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

to ze existuji tri roky neznamena ze je firmy ri roky instaluji. U nas zacli pred pul rokem. 64 bitove jen na CAD stations, zbytek w7 32 bit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

že by XP do dvou let vymizely to dost pochubuju..firmě kde je 200-500 počítačů s zabývá se jinou čiinsotí než IT, to bude asi trvat podtstatně déle..to nemluvím o WIN8 jak jsou úžasné..

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Není pravda že windows XP je nejpoužívanější, podle mnohých anket jsou používanější windows 7

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Aha, jistě. Můžete na tyto ankety uvést odkaz?

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

http://www.w3schools.com/browsers/browse...

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Tato statistika je stejne vypovidajici jako pocitani pouze zlutych aut a z toho delat zavery o poctu prodanych.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ve vsech prumyslovych podnicich, pro ktere pracuji jako ext.vyvojar, se pouziva jen XP. A nevidi duvod prechazet na W7.

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Každá technologie má svá pro a proti. Pokud budete psát aplikaci, musíte se rozhodnout, jaké použijete a jaké ne. Pokud potřebujete psát aplikace pro WinXP, tak se prostě omezíte a použijete .NET 4 místo 4.5.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak se prostě omezíte...

Proč bych měl omezovat sebe jen kvůli neschopnosti uživatelů aktualizovat počítač?

nahlásit spamnahlásit spam 0 / 2 odpovědětodpovědět

Protože uživatel za tu aplikaci přímo nebo nepřímo platí. A pokud píšete podnikovou aplikaci, kde ještě nějaká část infrastruktury používá XP, tak ne vždy můžete říct: "Aktualizujte, protože si chci ulehčit práci použitím nové konstrukce."

nahlásit spamnahlásit spam 3 / 3 odpovědětodpovědět

Diskuse: Co je to .NET Framework 4.5?

U verze 4.5 je to pasé, protože tam Windows XP prostě podporována nejsou (a ještě na to Microsoft doplatí). Ovšem u verze 4.0 jsem si zcela náhodou všimnul, že neinstaluje soubory a záznamy v registru potřebné pro běh aplikací psaných pro verzi 3.5 (ve Windows XP Service Pack 3). Platí to samé i pro verzi 4.5?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud vím, tak ano.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tom případě nemůže být o nějaké zpětné kompatibilitě ani řeč...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Diskuse: Co je to .NET Framework 4.5?

Pěkně sepsané vše na jednom místě.

Ještě jenom doplním, že pokud přepnete na FW 4.5, tak i když budete používat pouze FW 4.0 funkce, tak vybuildovaná aplikace již nepůjde spustit na Windows XP, zobrazí se přímo chyba:

...exe is not a valid Win32 application.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback