2012-12-17 22 views
8

Mam aplikację .NET 2.0 i planuję utworzyć "inteligentnego instalatora", który sprawdza dostępną wersję .NET na komputerze użytkownika i instaluje dla niej mój konkretny port. Widziałem, że:Pełne zrozumienie wersji .NET i kompatybilności wstecznej

  • Windows XP (SP2) pochodzi z .NET 2.0
  • Windows Vista pochodzi z .NET 3.0
  • Windows 7 jest wyposażony w .NET 3.5
  • Windows 8 jest wyposażony w .NET 4.5

O ile mi wiadomo, jedyną rzeczą, która nie jest kompatybilna wstecz, jest wersja CLR, która jest zmieniana po .NET 4.0.

Więc jeśli nie chcę użytkownika do zainstalowania dodatkowej ramy tylko dla mojej aplikacji, powinni mam te wersje mojego app:

  • .NET 2.0 - XP (SP2 i górnej), Vista (3.0 powinien być w stanie uruchomić 2.0) i 7 (3.5 powinno być w stanie uruchomić 2.0)
  • .NET 4.0 - jeśli ktoś zainstalował TYLKO 4.0 i nie ma innego
  • .NET 4.5 - dla użytkowników, którzy mają Windows 8 z żaden inny .NET zainstalowany

Mam rację? Lub 4.5/4.0 są kompatybilne wstecznie?

EDIT: Jeśli któryś z górnych danych nie jest w porządku, proszę mnie poprawić

+2

Urgh. Zamierzasz utworzyć inną wersję swojej aplikacji dla każdej dostępnej wersji .NET? Wydaje się, że straciłeś dużo czasu i starałeś się kodować.Dlaczego nie wybrać najniższego wspólnego mianownika? – KingCronus

+0

Nie zmieniam pojedynczej linii, tylko rekompiluj dla 3 różnych wersji. Mój instalator sieci wybierze jeden do zainstalowania. – blez

+2

Tak więc nie będziesz w ogóle korzystać z żadnych funkcji .NET 3/3.5/4 +. Równie dobrze możesz mieć jedną wersję .NET 2 w mojej opinii? Jaki jest twój powód, dla którego nie chcesz, aby użytkownik musiał zainstalować framework? Wydaje mi się to całkowicie uzasadnione. – KingCronus

Odpowiedz

9

O ile mi wiadomo, jedyną rzeczą, która nie jest wstecznie kompatybilny jest wersja CLR, który jest zmieniany po .NET 4.0.

To nie prawda. Możesz uruchomić skompilowaną aplikację .NET2 na platformie .NET4.

Wystarczy dodać następujące do app.config:

<configuration> 
<startup> 
    <supportedRuntime version="v2.0.50727"/> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> 
    </startup> 
</configuration> 

Uwaga, zgadzam się z @KingKronus, tj Why not just pick the lowest common denominator?

że w Twoim przypadku będzie .NET2 skompilowany i tylko jeden zestaw pdbs i jeden zestaw kompilacji.

Tak, należy przetestować skompilowaną aplikację .NET2 w środowisku wykonawczym .net4, ale należy przetestować ją w każdym z frameworków oryginalnego rozwiązania.

+0

Czy jest to samo, ale dla 4.5? Czy to też działa na 3.5 w przypadku projektów 4.0? – blez

+1

Sprawdzałem to teraz ... najlepiej jest spróbować. zobacz także ten link: http://msdn.microsoft.com/en-us/library/ff602939.aspx '.NET Framework 4.5 jest wstecznie kompatybilny z aplikacjami, które zostały zbudowane z .NET Framework w wersji 1.1, 2.0, 3.0, 3.5 i 4.' – wal

+0

i tak, to będzie działać również na 3,5 projektów; pamiętaj, że "działa", ponieważ projekty .net3.5 nadal używają środowiska .net2 * runtime * – wal

0
  1. Właściwie nie trzeba by sprawdzić go ręcznie. Po uruchomieniu aplikacja wyświetli poprawny komunikat i poprosi użytkownika o pobranie i zainstalowanie potrzebnej wersji.

  2. Jeśli nadal potrzebujesz obsługi systemu Windows XP, wybierz .NET 4.0. .NET 4.5 będzie obsługiwać to

+0

"W rzeczywistości nie trzeba sprawdzać go ręcznie, po uruchomieniu aplikacja wyświetli poprawny komunikat i poprosi użytkownika o pobranie i zainstalowanie potrzebnej wersji." to prawda tylko w Windows 8. – blez

+1

@blez Wrong. Windows XP i Windows 7 pokaże ci to okno dialogowe, sprawdziłem to. Windows XP nie rozpozna 4.5, ale 4.0 na pewno – VladL

+0

Nie chcę, aby użytkownik instalował całe środowisko tylko dla mojej aplikacji. – blez

Powiązane problemy