Najpierw przeczytałem, co następuje:
- Połącz etui
- Sprawa VS
- a zwłaszcza ten post na channel9
Tak więc, z ostatniego punktu, naprawdę myślę, że nie da się tego obejść, ale musiałem sprawdzić, czy uda mi się uzyskać ostateczną odpowiedź, ponieważ mój zespół chciałby zaktualizować .NET 4.0 do .NET 4.5. Musimy jednak wspierać XP.
Czy nie ma możliwości przejścia na .NET 4.5, jeśli chcemy wspierać XP?
Jedyne, o czym mógłbym pomyśleć, to stworzenie dwóch oddzielnych rozwiązań, ale wtedy bazy kodu musiałyby się różnić, gdybyśmy użyli funkcji .NET 4.5.
Dlatego szukam niesamowitego obejścia, którego nie mogłem znaleźć, a inni być może już wiedzą.
Odpowiedzi:
Waham się, czy zamieścić tę odpowiedź, jest to technicznie możliwe, ale w praktyce nie działa tak dobrze. Numery wersji środowiska CLR i podstawowych zestawów platformy nie zostały zmienione w 4.5. Nadal jest przeznaczona wersja 4.0.30319 środowiska CLR, a numery wersji zestawu struktury to nadal 4.0.0.0. Jedyną rzeczą, która jest charakterystyczna w manifeście zestawu, gdy patrzy się na niego za pomocą dezasemblera, takiego jak ildasm.exe, jest obecność atrybutu [TargetFramework], który mówi, że 4.5 jest potrzebne, który należałoby zmienić. Właściwie nie jest to takie proste, jest emitowane przez kompilator.
Największa różnica nie jest tak widoczna, Microsoft dokonał od dawna oczekiwanej zmiany w nagłówku wykonywalnego zestawów. Który określa, z jaką wersją systemu Windows plik wykonywalny jest zgodny. XP należy do poprzedniej generacji systemu Windows, zapoczątkowanej w systemie Windows 2000. Ich główny numer wersji to 5. Vista był początkiem obecnej generacji, głównym numerem wersji 6.
Kompilatory .NET zawsze określały minimalny numer wersji 4.00, wersja Windows NT i Windows 9x. Możesz to zobaczyć, uruchamiając dumpbin.exe / headers w zestawie. Przykładowe dane wyjściowe wyglądają następująco:
OPTIONAL HEADER VALUES 10B magic # (PE32) ... 4.00 operating system version 0.00 image version 4.00 subsystem version // <=== here!! 0 Win32 version ...
Nowością w .NET 4.5 jest to, że kompilatory zmieniają wersję podsystemu na 6.00. Zmiana, która była przesadna w dużej mierze, ponieważ system Windows zwraca uwagę na tę liczbę, poza sprawdzeniem, czy jest wystarczająco mała. Włącza również funkcje appcompat, ponieważ zakłada, że program został napisany do pracy w starszych wersjach systemu Windows. Te cechy sprawiają kłopoty, zwłaszcza sposób, w jaki Windows przedstawia rozmiar okna w Aero, jest kłopotliwy. Przestaje kłamać o grubych granicach okna Aero, gdy widzi, że program został zaprojektowany do uruchamiania w wersji systemu Windows, która ma Aero.
Możesz zmienić ten numer wersji i ustawić go z powrotem na 4.00, uruchamiając Editbin.exe na zestawach z opcją / subsystem. Ta odpowiedź przedstawia przykładowe wydarzenie po kompilacji.
Na tym jednak kończą się dobre wieści, poważnym problemem jest to, że .NET 4.5 nie jest zbyt kompatybilny z .NET 4.0. Zdecydowanie największym problemem jest to, że klasy były przenoszone z jednego zestawu do drugiego. Przede wszystkim dotyczyło to atrybutu [Rozszerzenie]. Wcześniej w System.Core.dll został przeniesiony do Mscorlib.dll w .NET 4.5. To kaboom na XP, jeśli zadeklarujesz własne metody rozszerzające, twój program mówi, aby szukać w Mscorlib atrybutu, włączonego przez atrybut [TypeForwardedTo] w .NET 4.5 wersji zestawu referencyjnego System.Core. Ale go nie ma, gdy uruchamiasz program na .NET 4.0
I oczywiście nic nie pomaga w zaprzestaniu używania klas i metod dostępnych tylko w .NET 4.5. Gdy to zrobisz, program zakończy się niepowodzeniem z TypeLoadException lub MissingMethodException po uruchomieniu w wersji 4.0
Wystarczy ustawić cel 4.0, a wszystkie te problemy znikną. Albo przerwij ten problem i przestań wspierać XP, decyzję biznesową, której programiści często nie mogą podejmować, ale z pewnością może zachęcić, wskazując kłopoty, które powoduje. Konieczność obsługi starożytnych systemów operacyjnych wiąże się oczywiście z niezerowym kosztem, tylko wysiłek związany z testowaniem jest znaczny. Koszt, który nie jest często rozpoznawany przez kierownictwo, zgodność z systemem Windows jest legendarna, chyba że zostanie im wskazana. Prześlij ten koszt klientowi, a on zwykle podejmuje właściwą decyzję o wiele szybciej :) Ale nie możemy Ci w tym pomóc.
źródło
just the testing effort is substantial
- to właśnie sprawiło, że nasz zarząd "pozwolił porzucić wsparcie XP".Niestety nie, nie można uruchamiać programów 4.5 na XP.
I odpowiedni post z tej strony Connect:
źródło
Projekt Mono porzucił obsługę systemu Windows XP i „zapomniał” o tym wspomnieć. Chociaż nadal twierdzą, że Windows XP SP2 jest minimalną obsługiwaną wersją, w rzeczywistości jest to Windows Vista.
Ostatnia wersja Mono obsługująca system Windows XP to 3.2.3.
źródło
Spróbuj mono:
http://www.go-mono.com/mono-downloads/download.html
Ten plik do pobrania działa we wszystkich wersjach systemu Windows XP, 2003, Vista i Windows 7.
źródło
Ostatnia wersja obsługująca system Windows XP (SP3) to mono-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi i nie zastępuje .NET 4.5, ale może być interesująca dla niektórych aplikacji.
zobacz tam: https://download.mono-project.com/archive/4.3.2/windows-installer/
źródło