Welcome to GASP Sign in | Join | Help

Paulo Morgado

Tudo sobre Arquitectura de Software

Localização dos Visitantes

  • Localização dos Visitantes

Livros

  • LINQ com C#

Eventos

Renûncia

As opiniões e pontos de vista expressos neste sítio são minhas e podem não reflectir as da Microsoft, do meu empregador, ou de qualquer comunidade a que pertença. Qualquer código ou opinião é oferecido sem qualquer garantia. Os produtos ou serviços mencionados são comprados por mim, disponibilizados pelo meu empregador ou pelo fabricante/vendedor o que não influencia em nada a minha opinião.

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>
Posted: Wednesday, October 21, 2009 1:46 AM by Paulo Morgado
Filed under: , ,

Comments

No Comments

Anonymous comments are disabled