Correndo Aplicações .NET 1.1 Em .NET 2.0

Uma das aplicações que desenvolvo é uma aplicação Windows Forms .NET 1.1 usada por cerca de 5000 utilizadores e crítica para o negócio.

Sendo uma aplicação complexa e crítica, migrá-la para o ambiente de execução 2.0 apenas porque sim não seria uma opção porque significaria instalar um novo ambiente de execução e plataforma no ambiente estável dos postos de trabalho (Windows XP) e testar todas as aplicações.

Com o passar dos tempos, um elemento da equipa recebeu um novo posto de trabalho com o Windows Vista. Uma vez que apenas necessitava de .NET 2.0 para os seus desenvolvimentos, nunca instalou a .NET 1.1.

Um outro membro da equipa já tinha tentado migrar a aplicação para .NET 2.0 e deparou-se com os seguintes problemas:

  • O principal componente da aplicação é o Web Browser Control. Este controlo extende o AxHost, que, na transição da 1.1 para a 2.0 sofreu alterações e necessitava de profundas alterações para que pudesse ser compilado para a plataform 2.0.
  • Misturar chamadas síncronas e assíncronas não é permitido na plataforma 2.0 e a aplicação tinha, pelo menos, um caso desses na utilização de HttpWebRequest/HttpWebResponse.

A .NET 2.0 foi desenvolvida para ter o máximo de retro compatibilidade com a .NET 1.1 por forma a poder correr com o mínimo e impactos (nenhum, na maioria dos casos) aplicações desenvolvidas para a .NET 1.1. De facto, algumas das alterações passaram apenas por aplicar o atributo ObsoleteAttribute de modo a que o compilador dê erro, impedindo a compilação de novo código mas não impedindo a utilização por parte de código previamente compilado. Era este o caso do WebBrowserControl/AxHost e usar a assembly compilada para .NET 1.1, provavelmente, seria  suficiente. E foi.

A questão do síncrono/assíncrono também foi fácil de resolver. Apenas requereu alterar isto:

request.GetRequestStream()

para isto:

request.EndGetRequestStream(response.BeginGetRequestStream(null, null))

E tudo funcionou como se estivesse a correr em .NET 1.1.

Mas ainda não é o fim da história. Mais tarde veio um requisito para que uma das páginas web que correm no controlo web browser usassem um componente ActiveX desenvolvido em .NET 2.0.

Por esta altura já os postos de trabalho tinham a plataforma 2.0 instalada.

Mas, como forçar a aplicação a correr no ambiente de execução 2.0 em vez de 1.1 dado que ambos estavam instalados nos postos de trabalho?

Tão simples como adicionar isto ao ficheiro de configuração (App.config):

<configuration>
  <startup>
    <requiredRuntime version="v2.0.50727" safemode="true"/>
  </startup>
</configuration>
Published 21-10-2009 1:46 por Paulo Morgado
Filed under: , ,

Comments

segunda-feira, 26 de Outubro de 2009 0:37 por Paulo Morgado

# Compilando Aplicações .NET 1.1 No Visual Studio 2008

Depois de ter a minha aplicação .NET 1.1 a correr no ambiente de execução .NET 2.0 ( ^ ), comecei a planear

segunda-feira, 26 de Outubro de 2009 0:37 por Paulo Morgado

# Compilando Aplica&#231;&#245;es .NET 1.1 No Visual Studio 2008

Depois de ter a minha aplicação .NET 1.1 a correr no ambiente de execução .NET 2.0 ( ^ ), comecei a planear

Leave a Comment

(requerido) 
(requerido) 
 
(opcional)
(requerido) 
If you can't read this number refresh your screen
Enter the numbers above: