É possível correr a.NET aplicação 4.5 no XP?

Primeiro, li o seguinte:

Então, a partir da última bala, eu realmente acho que não há maneira de contornar isso, mas eu tinha que ver se eu poderia obter uma resposta definitiva como minha equipe gostaria de atualizar de.NET 4.0 para .net 4.5. No entanto, temos de apoiar o XP.

Não há nenhuma possibilidade de ir para. NET 4.5 se queremos apoiar XP?

a única coisa que eu poderia pensar é criar duas soluções separadas, mas então as codebases teriam que divergir se nós usássemos.net 4.5 características.

Então, estou à procura de uma solução incrível que não consegui encontrar e que outros talvez já saibam.

Author: Wai Ha Lee, 2013-07-06

5 answers

Hesito em postar esta resposta, é tecnicamente possível, mas não funciona muito bem na prática. Os números de versão do CLR e as montagens de framework core não foram alterados em 4.5. Você ainda alvo v4. 0. 30319 do CLR e os números da versão framework assembly ainda são 4.0.0.0.0. A única coisa que distingue o manifesto da Assembleia quando se olha para ele com um desmontador como o ildasm.o exe é a presença de um atributo [TargetFramework] que diz: esse 4.5 é necessário, que teria de ser alterado. Não é assim tão fácil, é emitido pelo compilador.

A maior diferença não é que visível, a Microsoft fez uma alteração há muito esperada no cabeçalho executável das montagens. Que especifica com que versão do Windows o executável é compatível. O XP pertence a uma geração anterior de Windows, iniciada com o Windows 2000. O número da versão principal é 5. O Vista foi o início da geração atual, maior número de versão 6.

Os compiladores do. NET sempre especificaram o número mínimo de versão como sendo 4.00, a versão do Windows NT e do Windows 9x. você poderá ver isto se executar o dumpbin.exe / cabeçalhos no conjunto. A saída da amostra parece-se com isto:

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

O que há de novo no. NET 4.5 é que os compiladores mudam a versão do subsistema para 6.00. Uma mudança que foi super-devido em grande parte porque o Windows presta atenção a esse número, além de apenas verificar se ele é pequeno o suficiente. Ele também liga appcompat características desde que assume que o programa foi escrito para trabalhar em versões antigas do Windows. Estas características causam problemas, particularmente a forma como o Windows está sobre o tamanho de uma janela em Aero é problemático. Ele pára de mentir sobre as bordas de gordura de uma janela Aero quando ele pode ver que o programa foi projetado para executar em uma versão do Windows que tem Aero.

Pode alterar o número da versão e voltar a configurá-lo para as 4.00, executando o Editbin.exe nos seus conjuntos com a opção / sub-sistema. esta resposta mostra uma amostra do evento pós-construção.

[[[2]] Isso é no entanto sobre onde as boas notícias terminam, um problema significativo é que. NET 4.5 não é muito compatível com .NET 4.0. De longe, a maior dificuldade é que as aulas foram transferidas de uma assembleia para outra. Mais notavelmente, isso aconteceu com o atributo [Extension]. Anteriormente Em System.Nucleo.dll, foi transferido para Mscorlib.dll in. net 4.5. Isso é um kaboom no XP se você declarar seus próprios métodos de Extensão, seu programa diz para procure no Mscorlib o atributo, activado por um atributo [Typeforwarded to] na versão.net 4.5 do sistema.Central reference assembly. Mas não está lá quando você executa o seu programa no. NET 4.0

E claro que não há nada que o ajude a parar de usar classes e métodos que só estão disponíveis no.NET 4.5. Quando o fizer, o seu programa falhará com uma Tipeloadexcepção ou perderá a metodologia quando executar em 4, 0

Apenas o alvo 4.0 e todos estes problemas desaparecem. Ou quebrar esse logjam e parar de apoiar XP, uma decisão de negócios que os programadores não podem muitas vezes fazer, mas certamente pode incentivar, apontando os aborrecimentos que está causando. É claro que há um custo não-zero para ter que suportar sistemas operacionais antigos, apenas o esforço de teste é substancial. Um custo que não é muitas vezes reconhecido pela gestão, compatibilidade com Windows é lendário, a menos que seja apontado para eles. Encaminhe esse custo para o cliente e eles tendem a tomar a decisão certa muito mais rápido: ) mas não podemos ajudá-lo com isso.
 181
Author: Hans Passant, 2017-05-23 12:10:47

Infelizmente, não, você não pode executar 4.5 programas em XP.

E a publicação relevante dessa página de ligação:

Publicado pela Microsoft em 23/03/2012 às 10:39
Obrigado pelo relatório. Este comportamento é por design no. NET Framework 4.5 Beta. Os sistemas operacionais mínimos suportados são Windows 7, Windows Server 2008 SP2 e Windows Server 2008 R2 SP1. O Windows XP não é um sistema operacional suportado para a versão Beta.

 21
Author: Oztaco, 2013-07-06 09:44:43

Tenta mono:

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

Este download funciona em todas as versões do Windows XP, 2003, Vista e Windows 7.

 7
Author: luiseduardohd, 2014-04-12 22:40:15

O projecto Mono deixou cair o suporte do Windows XP e "esqueceu" para o mencionar. Embora eles ainda afirmam que o Windows XP SP2 é a versão mínima suportada, é na verdade o Windows Vista.

A última versão do Mono para suportar o Windows XP foi de 3.2.3.

 6
Author: guest, 2017-08-02 13:06:02

A última versão que suporta o windows XP (SP3) é mono-4.3.2.467-gtksharp-2.12.30.1-win32-0.msi e isso não substitui.net 4.5, mas poderia ser de interesse para algumas aplicações.

Veja ali: https://download.mono-project.com/archive/4.3.2/windows-installer/

 3
Author: Sandy, 2017-04-26 20:35:49