Może się zdarzyć, że aplikacja
została skompilowana, by obsługiwać pewną wersję .NET Framework,
jednak by chcemy ją zmusić by działała pod inną wersją. Okazuje
się, że można to zrobić bez rekompialacji. Jak? Wystarczy
wykorzystać element SupportedRuntime w pliku konfiguracyjnym
aplikacji (app.config).
Element supportedRuntime umieszczamy
wewnątrz elementów <configuration> i <startup>,
składnia została omówiona poniżej.
Składnia SupportedRuntime w app.config
Zgodnie z artykułem:
http://msdn.microsoft.com/en-us/library/w4atty68.aspx,
składnia wygląda następująco:
<supportedRuntime version="runtime version" sku="sku id"/>
Poniższa tabela wyjaśnia znaczenie
atrybutów:
atrybut | opis |
---|---|
version |
(atrybut opcjonalny) Łańcuch tekstowy, który wskazuje wersję .NET Framework wspierane przez aplikację. Ten łańcuch tekstowy musi pasować do nazwy katalogu, który znajduje się w katalogu instalacyjnym .NET Framework, a jego zawartość nie jest parsowana. |
sku |
(atrybut opcjonalny) Łańcuch tekstowy, który wskazuje profil klienta (SKU) na jakim uruchamiana jest aplikacja (więcej informacji można znaleźć w artykułach: Introducing .NET Framework 3.5 SP1 Client Profile Preview .NET Framework Client Profile). |
Przykład wykorzystania, app.config:
<?xml version="1.0"?> <configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> <supportedRuntime version="v2.0.50727" /> <supportedRuntime version="v1.1.4322" /> </startup> </configuration>
Jak sprawdzić, jakie .NET framework'i są zainstalowane?
Aby sprawdzić, jakie wersje .NET framework są zainstalowane w systemie można przejść do katalogu: %windir%\Microsoft.NET\Framework i sprawdzić, jakie są tam katalogi. Np. w moim przypadku są to:- v1.0.3705
- v1.1.4322
- v2.0.50727
- v3.0
- v3.5
- v4.0.30319
Jak sprawdzić, na jakiej wersji .NET framework uruchomiona jest aplikacja?
Aby sprawdzić, na jakiej wersji .NET
framework uruchamiana jest aplikacja, wystarczy wykorzystać
właściwość Version klasy Environment.
using System; class Version { public static void Main() { Console.WriteLine(); Console.WriteLine(".Net Framework Version {0}", Environment.Version.ToString()); } }
Czas na ważne pytanie: „Po co to wszystko?”
Wydawać by się mogło, że to dość
fajna funkcjonalność, jednak wcale nie jest tak różowo. W ten
sposób można wymusić by aplikacja działająca na starszym .NET
framework'u zadziałała na nowszym. Niestety nie zadziała, gdy
aplikację z nowszego .NET framework'u spróbujemy uruchomić na
starszym. Np. nie jest możliwe, by aplikację skompilowaną dla .NET
4.0 uruchomić na starszym Windows, gdzie dostępne jest tylko .NET
2.0.
Przyznam, że chwile myślałem nad
sensownym przykładem wykorzystania tego mechanizmu. Tłumaczenie
typu w systemie mam framework .NET 4.0, ale nie mam wersji 2.0 wydaje
mi się mało prawdopodobne. Być może bardziej prawdopodobna jest
sytuacja, że mamy archaiczną aplikację dla .NET 1.1 i chcemy ją
uruchomić na wyższej wersji, ale ze względu na małą popularność
.NET 1.0 lub .NET 1.1, to też jest mało prawdopodobne. Udało mi
się jednak wymyślić, wydaje mi się, że dość dobry przykład,
który opiszę w kolejnym post'cie.
Czy ktoś zgadnie jaki? Jeżeli ktoś
ma pomysł, niech napisze go w komentarzu.
Na Windows XP użytkownicy często instalują NET Framework 4, nie mając NET Framework 2. Program wtedy nie działa, zgłaszają bug.
OdpowiedzUsuńNa Vista i 7 to nie jest problem, bo tam NET Framework 2 jest wbudowany.