Wiadomym jest, że .NET 3.5 jest kompatybilny na poziomie źródłowym i binarnym z .NET 2.0. Zauważyłem, że .NET 4.0 jest kompatybilny z .NET 3.5 tylko na poziomie źródłowym, a nie jest na poziomie binarnym. Objawia się tym, że w Windows Server 2012, jak próbuję uruchomić aplikację skompilowaną w .NET 3.5, to wymusza instalację wersji 3.5 pomimo istnienia 4.0. Jak wczytam kod źródłowy do Visual Studio 2012, we właściwościach ustawię wersję .NET 4.0 i skompiluję, to na serwerze uruchamia się bez problemu. Jest to dowód na to, że .NET 4.0 zawiera wszystko to, co zawierały wcześniejsze wersje do 2.0 włącznie, więc równoległe istnienie .NET 3.5 i .NET 4.0 w systemie nie ma sensu, wszystko będzie zdublowane, poza tym nie po to jest fabrycznie zainstalowany .NET, żeby trzeba było instalować .NET osobno.
Zakładam, że na serwerze nie mam uprawnień administracyjnych, ale mogę wprowadzać dowolne pliki i uruchamiać dowolne programy.
Jeżeli mam kod źródłowy programu i kompilator kompilujący do .NET 4.0, to nie ma problemu. Co w przypadku, gdy nie mam kodu, lub nawet ani kodu ani VS2012?
Wydaje mi się, że da się przekonwertować plik EXE nie mając kodu źródłowego. Może tylko w nagłówku wystarczy coś zmienić, albo po prostu przekonwertować każdy rozkaz MSIL na odpowiednik z .NET 4.0. Pomijam fakt, że nowsza wersja kompilatora Visual Studio lepiej optymalizuje kod MSIL przy kompilacji kodu źródłowego. Czy istnieje jakiś sprawdzony program lub sposób, że wczytuję plik EXE i zapisuje plik EXE kompatybilny z .NET 4.0?
Jak ustawić projekt w Visual Studio 2012, żeby można było go skompilować pod .NET 3.5 i uruchamiać tam, gdzie nie ma .NET 4.0, ale jednocześnie ten sam EXE uruchamiać na systemie zawierającym wyłącznie .NET 4.0 bez żadnych zmian, ani dwóch identycznych EXE różniących się wersją .NET, ani doinstalowywania .NET 3.5?