[c#] XP에서 .NET 4.5 앱을 실행할 수 있습니까?

먼저 다음을 읽었습니다.

그래서 마지막 글 머리 기호에서 저는이 문제를 해결할 방법이 없다고 생각합니다.하지만 저희 팀이 .NET 4.0에서 .NET 4.5로 업그레이드하기를 원하기 때문에 확실한 답을 얻을 수 있는지 확인해야했습니다. 하지만 XP를 지원해야합니다.

XP를 지원하려는 경우 .NET 4.5로 이동할 가능성이 없습니까?

내가 생각할 수있는 유일한 것은 두 개의 별도 솔루션을 만드는 것입니다.하지만 .NET 4.5 기능을 사용하면 코드베이스가 달라져야합니다.

그래서 저는 찾을 수 없었고 다른 사람들이 이미 알고있을 수도있는 몇 가지 놀라운 해결 방법을 찾고 있습니다.



답변

이 답변을 게시하는 것을 주저합니다. 실제로 기술적으로 가능하지만 실제로는 잘 작동하지 않습니다. CLR 및 핵심 프레임 워크 어셈블리의 버전 번호는 4.5에서 변경되지 않았습니다. 여전히 CLR의 v4.0.30319를 대상으로하고 프레임 워크 어셈블리 버전 번호는 여전히 4.0.0.0입니다. ildasm.exe와 같은 디스어셈블러를 사용하여 어셈블리 매니페스트를 볼 때 유일한 점은 4.5가 필요하며 변경해야한다는 [TargetFramework] 특성이 있다는 것입니다. 실제로 그렇게 쉽지는 않지만 컴파일러에서 내 보냅니다.

가장 큰 차이점은 눈에 띄지 않는다는 것입니다. 마이크로 소프트는 어셈블리의 실행 가능한 헤더를 오랫동안 변경했습니다. 실행 파일이 호환되는 Windows 버전을 지정합니다. XP는 Windows 2000으로 시작된 이전 세대의 Windows에 속합니다. 주 버전 번호는 5입니다. Vista는 현재 세대의 시작 인 주 버전 번호 6입니다.

.NET 컴파일러는 항상 최소 버전 번호를 Windows NT 및 Windows 9x 버전 인 4.00으로 지정했습니다. 어셈블리에서 dumpbin.exe / headers를 실행하여이를 확인할 수 있습니다. 샘플 출력은 다음과 같습니다.

OPTIONAL HEADER VALUES
             10B magic # (PE32)
            ...
            4.00 operating system version
            0.00 image version
            4.00 subsystem version              // <=== here!!
               0 Win32 version
            ...

.NET 4.5의 새로운 기능은 컴파일러가 해당 하위 시스템 버전을 6.00으로 변경한다는 것입니다. Windows가 그 숫자가 충분히 작은 지 확인하는 것 이상으로 그 숫자에주의를 기울이기 때문에 대부분 기한이 지난 변경입니다. 또한 프로그램이 이전 버전의 Windows에서 작동하도록 작성되었다고 가정하므로 appcompat 기능을 켭니다. 이러한 기능은 특히 Windows가 Aero에서 창 크기에 대해 놓이는 방식에 문제를 일으 킵니다. 프로그램이 Aero가있는 Windows 버전에서 실행되도록 설계되었음을 알 수있을 때 Aero 창의 두꺼운 테두리에 대해 거짓말을 중지합니다.

/ subsystem 옵션을 사용하여 어셈블리에서 Editbin.exe를 실행하여 해당 버전 번호를 변경하고 다시 4.00으로 설정할 수 있습니다. 이 답변 은 샘플 빌드 후 이벤트를 보여줍니다.

그러나 그것은 좋은 소식이 끝나는 부분에 관한 것입니다. 중요한 문제는 .NET 4.5가 .NET 4.0과 매우 호환되지 않는다는 것입니다. 지금까지 가장 큰 문제는 클래스가 한 어셈블리에서 다른 어셈블리로 이동되었다는 것입니다. 특히 [Extension] 속성에서 발생했습니다. 이전에는 System.Core.dll에서 .NET 4.5의 Mscorlib.dll로 이동했습니다. 자체 확장 메서드를 선언하는 경우 XP에서는 카붐입니다. 프로그램은 System.Core 참조 어셈블리의 .NET 4.5 버전에서 [TypeForwardedTo] 속성으로 활성화 된 속성을 Mscorlib에서 찾아 보라고 말합니다. 그러나 .NET 4.0에서 프로그램을 실행할 때는 없습니다.

물론 .NET 4.5에서만 사용할 수있는 클래스와 메서드 사용을 중단하는 데 도움이되는 것은 없습니다. 그렇게하면 4.0에서 실행될 때 TypeLoadException 또는 MissingMethodException과 함께 프로그램이 실패합니다.

4.0 만 목표로하면 이러한 모든 문제가 사라집니다. 또는 프로그래머가 자주 내릴 수 없지만 그것이 야기하는 번거 로움을 지적함으로써 확실히 장려 할 수있는 비즈니스 결정 인 XP 지원을 중단하고 XP 지원을 중단하십시오. 물론 오래된 운영 체제를 지원하는 데 드는 비용은 0이 아니며 테스트 노력만으로도 상당합니다. 경영진이 자주 인식하지 못하는 비용 인 Windows 호환성은 지적되지 않는 한 전설적입니다. 그 비용을 고객에게 전달하면 그들은 올바른 결정을 더 빨리 내리는 경향이 있습니다. 🙂 그러나 우리는 당신을 도울 수 없습니다.


답변

안타깝게도 XP에서는 4.5 프로그램을 실행할 수 없습니다.

그리고 그 연결 페이지의 관련 게시물 :

Microsoft가 2012 년 3 월 23 일에 10:39
에 작성했습니다. 신고 해 주셔서 감사합니다. 이 동작은 .NET Framework 4.5 베타에서 의도적으로 설계된 것입니다. 지원되는 최소 운영 체제는 Windows 7, Windows Server 2008 SP2 및 Windows Server 2008 R2 SP1입니다. Windows XP는 베타 릴리스에서 지원되는 운영 체제가 아닙니다.


답변

Mono 프로젝트는 Windows XP 지원을 중단 하고 언급하는 것을 “잊었습니다” . 그들은 여전히 ​​Windows XP SP2가 최소 지원 버전이라고 주장하지만 실제로는 Windows Vista입니다.

Windows XP를 지원하는 마지막 Mono 버전은 3.2.3이었습니다.


답변

모노 시도 :

http://www.go-mono.com/mono-downloads/download.html

이 다운로드는 Windows XP, 2003, Vista 및 Windows 7의 모든 버전에서 작동합니다.


답변

Windows XP (SP3)를 지원하는 마지막 버전은 mono-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi이며 .NET 4.5를 대체하지는 않지만 일부 응용 프로그램에서는 유용 할 수 있습니다.

거기 참조 :
https://download.mono-project.com/archive/4.3.2/windows-installer/


답변