sobota, 15 maja 2010

SupportedRuntime w app.config, czyli jak uruchomić aplikację pod innym .NET Framework'iem [PL]

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

Promuj

1 komentarz:

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

    Na Vista i 7 to nie jest problem, bo tam NET Framework 2 jest wbudowany.

    OdpowiedzUsuń

Posty powiązane / Related posts