El modo desconectado de Visual Studio

11:21 0 Comments

A continuación se muestra un resumen del funcionamiento del modo desconectado de Visual Studio 2003/2005.

Cuando no tenemos conexión con el servidor de control de versiones, Visual Studio detecta esta situación y ofrece trabajar en modo desconectado. Aparecerá una ventana como ésta si estamos trabajando con Visual Studio 2003:


O como ésta si estamos trabajando con Visual Studio2005:


Para desconectar manualmente una solución tenemos que pulsar sobre Archivo --> Control de código fuente --> Cambiar control de código fuente ... y pulsar sobre el botón "Desconectar"

Una vez que hemos desonectado la solución, podemos seguir trabajando normalmente aunque no tengamos conexión con el servidor. Cuando queremos modificar un fichero, Visual Studio "simula" el checkout (desprotección). La desprotección no se ha enviado al servidor, por tanto es muy importante reconectar en cuanto se disponga nuevamente de conexión, ya que las modificaciones que se realizan mientras se está desconectado son exclusivamente locales al disco donde se están realizando.

La información sobre si una solución o sus proyectos están conectado o no con el control de código fuente, Visual Studio las almacena en los ficheros con extensión .suo (Solution User Options). Es muy importante que los ficheros .suo nunca estén bajo el control de versiones, sino que sean privados a cada workspace, ya que esta información es diferente para cada usuario.

Cuando una solución está desconectada, Visual Studio deduce el estado de los ficheros únicamente por el atributo de sólo lectura en el disco local. Es un fichero de sólo lectura estará protegido y uno writable estará desprotegido.

La única operación de control de código fuente disponible en modo desconectado es el checkout (desproteger). Cuando se hace un checkout a un fichero, Visual Studio simplemente quita la protección contra escritura a ese fichero en disco.

A la hora de reconectar, Visual Studio busca ficheros sin protección contra escritura y lanza checkouts reales contra el servidor de control de código fuente.

Adicionalmente, para cada fichero se hace un Diff(), y para aquellos que hayan cambiado en disco fuera del control de código fuente Visual Studio da un aviso, indicando que el contenido en disco es diferente del contenido en el control de código fuente:



Algunos problemas conocidos

Varios clientes han reportado en ocasiones problemas al utilizar el modo desconectado, que se enumeran a continuación:

Error no especificado al tratar de desconectar una proyecto o solución

Las pantallas de error que puede obtener son las siguientes (VS2003 y VS2005 respectivamente):





En ambos casos se trata de bugs de Visual Studio. Puede aprender más sobre este tipo de errores en la siguiente dirección:

http://alinconstantin.homeip.net/WebDocs/Scc/_UnspecifiedError.htm

Es más común encontrar fallos cuando se trata de proyectos Web, para los cuáles se recomienda seguir las siguientes pautas:

http://www.codicesoftware.com/releases/webDevelopmentwhitepaper.pdf

En caso de proyectos no Web, una buena práctica a seguir es colocar de forma adecuada en disco la solución y los proyectos. En Visual Studio 2003 ocurre que cuando el fichero de solución está en un directorio más interno que alguno de los proyectos que contiene, Visual Studio no es capaz de manejarlo bien.


Una forma muy sencilla de reproducir el caso es montar una solución con dos proyectos como se describe en la siguiente imagen:


Cuando no se tiene conexión con el servidor, se da un error controlado y aparece el diálogo para desconectar. Una vez que se pulsa en desconectar y se pulsa ok, aparece el "Error desconocido" citado anteriormente.

La forma de evitar este caso es refactorizar el fichero de solución modificando su ruta, de tal forma que la solución siempre esté en un directorio más externo que todos los proyectos que contiene. Algo parecido a la siguiente figura:

En Visual Studio 2005 este problema está corregido.

0 comentarios: