Blog dedicado a la programación .NET y la informática en general

Nota : Me he encontrado entre mis borradores este artículo que no publiqué en su momento, ya está desfasado pero quién sabe si le sirve a alguien por lo que lo publico ahora.

Puede daros el caso como el que yo tengo en el que vuestro proveedor de hosting limite el tiempo máximo de timeout de la sessión a un valor escaso para vuestro fin. Lo cual obliga a vuestros usuarios a tener que autenticarse cada vez que acceden a vuestra web. Para evitar esto y no depender del timeout de sesión podemos hacer persistente la autenticación mediante el uso de Cookies.

Las cookies son ficheros de texto de intercambio entre el explorador y el servidor que almacenan información relevante a la página web y de forma individual para cada usuario. Estos ficheros son almacenados en el equipo que usa el cliente y en algunos casos son objeto de fines malintencionados por lo que evitaremos guardar información confidencial y en nuestro caso almacenaremos un token o símbolo que identifique al usuario.

Cuando el usuario ha sido autenticado correctamente se crea la cookie a guardar en el cliente:

   1: // Crea el contenedor de autenticación
   2: FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
   3:                                                                     this.LoginUser.UserName,
   4:                                                                     DateTime.Now,
   5:                                                                     DateTime.Now.AddDays(Constantes.VariablesConfiguracion.AutenticationCookieDaysExpired),
   6:                                                                     true,
   7:                                                                     string.Empty);
   8:
   9: // Encripta the ticket de autenticación
  10: string encTicket = FormsAuthentication.Encrypt(ticket);
  11:
  12: // Crea la cookie
  13: HttpCookie galleta = new HttpCookie(Constantes.AutenticacionCookieName, encTicket);
  14: galleta.Expires = ticket.Expiration;
  15: Response.Cookies.Add(galleta);

Para recuperar la cookie almacenada seguiremos este otro código:

   1: MembershipUser usuarioAutenticado = Membership.GetUser();
   2:
   3: // Comprueba si tiene una cookie almacenada para restaurar la autenticación
   4: if (usuarioAutenticado == null)
   5: {
   6:     // Se comprueba si hay una cookie almacenada
   7:     HttpCookie myCookie = Request.Cookies[Constantes.AutenticacionCookieName];
   8:
   9:     // Lee la cookie y comprueba el usuario y si es válido lo da como autenticado
  10:     if (myCookie != null)
  11:     {
  12:         FormsAuthenticationTicket ticketRecupeado = FormsAuthentication.Decrypt(myCookie.Value);
  13:         string strUsuario = ticketRecupeado.Name;
  14:         MembershipUser usuarioCookie = Membership.GetUser(strUsuario);
  15:         if (usuarioCookie != null && usuarioCookie.IsApproved && !usuarioCookie.IsLockedOut)
  16:         {
  17:             FormsAuthentication.SetAuthCookie(usuarioCookie.UserName, true);
  18:             Response.Redirect(Request.Url.AbsoluteUri);
  19:         }
  20:     }
  21: }

Y eliminamos la cookie cuando el usuario cierra la sesión manualmente.

   1: // Desconecta al usuario activo y elimina sus cookies
   2: HttpCookie myCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
   3: if (myCookie != null)
   4: {
   5:     myCookie.Expires = DateTime.Now;
   6:     Response.Cookies.Set(myCookie);
   7: }

Espero que os funcione.

Anuncios

¿A quién no le ha pasado alguna vez que al volver de las vacaciones se ha encontrado que la luz se ha ido y todo el frigorífico y congelador se ha ido al garete?

¿Te gustaría saber a través de internet si se ha ido la luz en tu casa gratis y sin muchas complicaciones?

Pues entonces atento.

image

¿Qué necesitas?

  1. Un ordenador encendido 24 horas durante el periodo que estés fuera de casa. OJO un PC de sobremesa de “toda la vida” ronda los 150W de consumo, pero un microPC como puede ser de la marca Zotac como el que yo tengo en casa rondan los 20W.
  2. Configurar la BIOS del ordenador para que se encienda de forma automática cuando la luz vuelva.
  3. Tener instalado un cliente de mensajería instantánea y una cuenta asociada exclusivamente para este fin.
  4. Configurar el cliente de mensajería para que arranque de forma automática.
  5. Agregar la cuenta de mensajería instantánea a tu grupo de contactos para ver si está “online” o no.

¿Cómo funciona?

Cuando estés fuera de casa podrás saber si tienes suministro eléctrico cuando accedas a tu cliente de mensajería instantánea y veas que el contacto, que está instalado en el PC encendido las 24 horas, está “online” o no. Si la luz se va el ordenador no estará encendido y por tanto el contacto desconectado. Cuando vuelva la luz el ordenador se encenderá de forma automática y también el cliente de mensajería instantánea y por tanto el contacto estará “online”.

¿Te interesa que entre en detalles?… deja entones un comentario en el blog y desarrollaré con más detalles todo lo necesario con el cliente de mensajería “Skype”.

Primero indicar que esto es una MALA PRÁCTICA, pero a veces se hace necesaria cuando no tienes acceso al servidor de hosting como te gustaría, en mi caso no puedo guardar un fichero log de errores, tampoco en base de datos y de hecho no llega ni a pasar por la página inicial, y de depurar en remoto ni hablamos.

La forma más fácil cuando no sabes el error que te da la aplicación es cambiar el web.config y activar la página web de errores que viene por defecto en ASP.NET.

Para ello poner lo siguiente:

<system.web>
<compilation debug="true" targetFramework="4.5">
<customErrors mode="Off" />
</system.web>

Una vez que tengáis el error volver a ponerlo como estuviera, como repito, es una MALA PRÁCTICA.

En mi caso ha sido porque el hosting ha incluido el Framework 4.5 y ahora las configuraciones del web.config son visibles también en los subdominios. Por lo cual la sección correspondiente a las EnterpriseLibrary se estaban pisando y al ser un error del fichero de configuración no pasaba ni tan siquiera por el Global.asax, así que no tenía forma de capturar el error y gracias a esta modificación que comento he podido comprobar el error y arreglarlo.

Detalles del error:

Tipo del Error: Configuration Error 

Descripción: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Mensaje del Error: Section or group name ‘loggingConfiguration’ is already defined. Updates to this may only occur at the configuration level where it is defined.

Espero que no lo tengáis que utilizar.

Introducción

Prácticamente desde que empecé a programar en .NET (allá por el 2003) he usado como controlador de código para mis propios proyectos el Visual SourceSafe (VSS) desde su versión 6 hasta la última del 2005 (v.8). Principalmente porque podía llevarlo en un pendrive y tenerlo disponible allí donde iba. Eso no quita que profesionalmente haya usado también SVN o ClearCase, pero desarrollando con Microsoft uno tira por lo que le da de comer.

Desde la salida de VS2010 Microsoft ha puesto mucho interés en que usemos Team Foundation Server (TFS). El caso es que esto no me era viable debido a que no disponía de la portabilidad que me ofrece el “pendrive”, y me es imposible subirlo a un servidor donde ponerlo “online” para poder acceder desde cualquier sitio con internet.

Esto ahora ha cambiado gracias a la conferencia que hizo MadridDotNet el pasado día 23 de Octubre de 2012 y a una consulta que hice en Twitter a MSDN España y a la cual me respondieron. En la conferencia, entre otras muchas cosas, hablaron de TfsPreview.com (ahora Team Foundation Service, que no Server, no se si han elegido una buena nomenclatura seguro que alguno se hace el lio), un portal para poder disponer de un servidor TFS en la nube para tus proyectos. La versión “Free” por supuesto tiene sus limitaciones, no está disponible SharePoint ni Reporting, y tiene las mismas limitaciones que un TFS Express donde se pueden conectar hasta 5 desarrolladores a un proyecto. Sí dispone de número ilimitado de proyectos, control de versiones, trazado de tareas, herramientas de planificación para las metodologías ágiles, gestión de retroalimentación o retroinformación (llamémoslo mejor “Feedback”) y generación de ensamblados (nombrados como “Builds”). Ruego que me perdonéis mi mala traducción.

Tenéis más detalles de las características en su página web.

En este artículo veremos:

 

Creación de Cuenta

¿Por dónde empezar? Abriendo una nueva cuenta en la página web “tfs.visualstudio.com”. Para ello deberás tener una cuenta Live con la que autenticarte y administrarla.

Img. Creación de Cuenta

pantallazo

Al crear la cuenta te genera una colección por defecto llamada DefaultCollection de donde van a colgar el resto de tus proyectos. Por defecto te pedirá que generes una, ten cuidado con el nombre que le pones porque una vez puesto o lo dejas tal cual o lo borras, y esta segunda opción no es moco de pavo.

Img. Portal de Bienvenida

pantallazo2

Llegados a este punto he de decir que la gestión de los “proyectos de equipo” es bastante limitada en cuanto a renombrar o a eliminar. Se puede generar nuevos “proyectos de equipo” o gestionar los que ya tengas hechos, los grupos de usuarios y los roles de los mismos. Todo de forma fácil y básica y bajo la rama principal llamada “DefaultCollection”.

Img. Configuración de Cuenta

pantallazo3

Conexión con Visual Studio

La conexión de Visual Studio (VS) con el TFS Online es muy sencilla siempre y cuando no tengáis un proxy de por medio.

Hay que destacar que soporta conexión con las versiones 2008, 2010 y 2012. No lo he comprobado con versiones anteriores. Se que con la versión 2012 no hay ningún tipo de problema conocido, pero recomiendo la actualización del mismo. Con la versión 2010 debe tener instalado el SP1 y el (Hotfix KB2581206 este ya no vale) Hotfix KB2662296. Para VS2008 también se debe tener instalado una actualización de distribución general.

Img. Conexión VS con TFS

pantallazo4

Para VS2012 la ruta de menús es la siguiente:

EQUIPO –> Conectar con Team Foundation Server –> Servidores… –> Agregar

No voy a profundizar en el manejo de TFS, pero prácticamente se puede hacer todo desde las herramientas de “Team Explorer”, la ventana de “Explorador de control de código fuente” y desde el menú “Equipo”.

Corrección de problemas de conexión

Entramos en terreno pantanoso, los problemas de conexión en red que usan proxy y las credenciales de conexión. En este caso lo he solucionado para VS2010, pero probablemente pase lo mismo para VS2012.

Primer Paso : Adaptar Visual Studio para que tome las credenciales del proxy

La solución la he obtenido de este enlace. El cual explica como generar una librería que hay que poner en la carpeta de Visual Studio y cómo hay que cambiar su fichero de configuración para que tome dicha librería, la cual va a proporcionar los identificadores necesarios para la conexión proxy.

Yo además le he incluido el código necesario para que dichas credenciales las pueda tomar de su propio fichero de configuración:

Img. Configuración Librería

pantallazo5

Código Fuente Clase Credenciales Proxy Configurables
public class ModuloAutenticacion : IWebProxy
{
    ICredentials crendential = new NetworkCredential(Configuracion.AppSettings.Settings["ProxyUser"].Value, Configuracion.AppSettings.Settings["ProxyPassword"].Value);
    public ICredentials Credentials
    {
        get { return crendential; }
        set { crendential = value; }
    }
    public Uri GetProxy(Uri destination)
    {
        return new Uri(Configuracion.AppSettings.Settings["ProxyUrl"].Value, UriKind.Absolute);
    }
    public bool IsBypassed(Uri host)
    {
        return host.IsLoopback;
    }
    /// <summary>       
    /// Obtiene la configuración de la aplicación        
    /// </summary>       
    public static Configuration Configuracion
    {
        get
        {
            return ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().GetName().CodeBase.Replace("file:///", string.Empty));
        }
    }
}

La librería resultante y su fichero de configuración hay que ponerlos en el directorio de Visual Studio. Hecho esto se cambia el fichero de configuración de VS incrustando un código parecido a este:

Código XML Configuración VS
<system.net>
  <defaultProxy>
    <module type="RublenX.AutenticacionProxy.ModuloAutenticacion, RublenX.AutenticacionProxy"/>
  </defaultProxy>
</system.net>

Ojo, aquí no se resuelven todos los problemas, al menos en mi caso.

Segundo Paso : Configuración de las Credenciales de la Web

Llegados a este punto el servidor no me daba errores de conexión por las credenciales proxy, este vez era por la autenticación contra “tfs.visualstudio.com”. ¿Qué hacer entonces?. Pues cambiar las credenciales desde el “Panel de Control”.

Img. Acceso al Administrador de Credenciales


pantallazo6

Incluir una nueva entrada con la dirección web de “tfs.visualstudio.com” y vuestras credenciales de “Window Live”. No hace falta que lo explique ¿verdad?. Bueno dicen que una imagen vale más que mil palabras.

Img. Configuración Credenciales (Recordar que ya no es “tfspreview” sino “visualstudio”)


Credenciales

Traspaso de los ficheros de VSS a TFS

En este caso el equipo de foro de MSDN en español fueron tan atentos, como suelen tenernos acostumbrados, y contestaron a este planteamiento: ¿Cómo traspaso mis proyectos de VSS a TFService?.

La solución la tenemos descargando la herramienta “Visual Source Safe Upgrade Tool for Team Foundation Server” o con el nombre con el que se instala en el equipo “VSS Upgrade Wizard”.

Recomiendo tener el “SQLServer Express” instalado en el equipo ya que se va a necesitar como almacenamiento temporal durante la exportación a TFS. Y también que ejecutéis la herramienta de “SourceSafe” llamada “Analyze” para evitar que los problemas que pueda tener la BBDD de VSS pueda dar problemas en la migración de los datos. Por ejemplo mediante la siguiente línea de comando (cambiando claro está la ruta que he puesto por la de vuestro directorio):

analyze -C -D -F -V4 J:\PROGRAMACION\VSSBBDD\DATA

Mecanismo de un chupete… arrancamos el programa y seguimos estos pasos:

Img. Selección del Directorio Fuente de VSS


pantallazo7

Img. Selección del Servicio TFS


pantallazo8

Img. Opciones de Exportación y SQL Server


pantallazo9

Img. Resumen de Configuración


pantallazo10

Img. Validación de Configuración


pantallazo11

Img. Proceso de Análisis y Subida


pantallazo12

Si todo ha ido bien os aparecerá las siguiente pantallas.

Img. Migración Finalizada


pantallazo13

Img. Resultado de Migración


pantallazo16

Si has llegado hasta aquí tendrás tu copia de VSS subida a TFS, pero también te puede pasar como a mí que la migración de algún tipo de problema:

Img. Migración con Errores


pantallazo14

Img. Detalle de Errores


pantallazo15

Podéis comprobar los errores en el fichero XML que genera el programa en su carpeta Logs:

C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs

Abriéndolo con el “XML Editor” que instala Office lo podréis leer sin problemas, pero sino ir a la sección “Issues” y podéis hacer una búsqueda por Type=”Error” o por Type=”Warning”.

En mi caso los 4 errores se han producido por un fichero con una nomenclatura antigua de DOS (si, si, ese sistema operativo que su interfaz gráfica era todo texto) y que he podido agregar manualmente al TFS posteriormente.

Los avisos o “warnings” me dan cuando el fichero fue creado en otra rama diferente de la que esté ubicado en ese momento y su fecha de creación se queda por tanto en el momento en el que se pasó a esa rama. Y el resto de los avisos se suceden prácticamente por mover ficheros en SourceSafe de una carpeta a otra.

Sea como sea se guarda el registro de cambios y se puede hacer el seguimiento de los mismos.

Img. Historia Fichero Importado


pantallazo17

Eliminación de un Proyecto de Equipo

Si os ha pasado como a mí, el primer proyecto de equipo le ponéis cualquier nombre pensando ingenuamente que luego se lo podréis cambiar…. pues NO.

Para borrar un Equipo de proyecto, ejecutar en modo administrador el icono de Visual Studio “Símbolo del sistema de las herramientas nativas de VS2012 x86”, y una vez abierta la ventana de comandos se ejecutaría la siguiente orden, cambiando por supuesto “tuproyecto” y “Nombre Proyecto” por los correspondientes:

TFSDeleteProject /collection:”https://tuproyecto.visualstudio.com/DefaultCollection” “Nombre Proyecto”

Img. Resultado de la Ejecución de Eliminación


image

Probé a ejecutarlo en otro acceso director de “Símbolo de Comandos” que tiene Visual Studio y no funcionó, así que si no os va en uno probar en otro, yo os he puesto donde sí me ha funcionado.

Conclusión

Estoy mucho más que satisfecho con la decisión de pasarme a TFS, mis datos ahora no sólo están accesibles desde cualquier sitio con conexión a internet sino que también están seguros, ya no los llevo encima en un dispositivo que podía perderse o estropearse. Y si nos ponemos hablar de las ventajas de TFS frente a VSS entonces este artículo sería ya mucho más largo de lo que ya lo es de por sí.

Cualquier duda o aclaración estoy a vuestra entera disposición.

Saludos.

DNLA en Windows 7

¿Qué es DNLA? pues en resumidas cuentas la forma en la que uno puede compartir ficheros multimedia entre varios dispositivos capaces de reproducirlos.

En mi caso, teniendo 3 o 4 ordenadores activos en mi casa, lo normal es tener una red doméstica. Uno de los ordenadores almacena todas las fotos y videos caseros, además de la música que me gusta escuchar, por tanto no es muy descabellado usar el DNLA.

En el ejemplo concreto que voy a exponer he configurado un televisor Philips con un cliente DNLA mediante Wifi. Y ahora viene la configuración del servidor DNLA que se realiza mediante Windows Media Player 12 y sobre el sistema operativo Windows 7.

Lo primero es tener un grupo de compartición de archivos en la red, esto se puede hacer desde “Panel de control\Redes e Internet\Grupo Hogar

Lo segundo configurarlo tal cual:

GrupoHogar

Abriendo “Cambiar configuración de uso compartido avanzado…”:

ConfiguracionGrupoHogar

Luego hay que dar permiso a los dispositivos clientes para que tengan acceso al servidor DNLA. Para ello se entra en “Panel de control\Redes e Internet\Centro de redes y recursos compartidos\Opciones de transmisión por secuencias de multimedia, y se permiten aquellos dispositivos que reconozcamos.

TransmisiónSecuencias

Con esto debería ser suficiente, si se quiere ver lo que estamos compartiendo sólo hay que abrir el Windows Media Player con la ventana de la biblioteca, y ahí estarán las carpetas incluidas.

He leído que en algunas ocasiones hay que quitar la contraseña del grupo para que se puedan ver los archivos, en mi caso no ha sido necesario y entiendo que esto ha sido así por el último paso que so he indicado donde permitía el acceso a los diferentes clientes DNLA.

Donde sí que he tenido problemas ha sido en el ordenador donde tenía más de una red configurada. En mi caso era el ordenador que tiene una red Wifi por donde le llega internet y otra red que comparte la conexión a internet para el iPlus. No me ha quedado otra que desactivar la conexión al iPlus y entonces el televisor me ha reconocido perfectamente el DNLA de este. Tengo que probar otra vez a configurarlo para ver si consigo que coexistan las dos redes a la vez, pero ya lo dejo para otra ocasión, ya que no me es imprescindible.

También he deajdo un video en Youtube
http://www.youtube.com/watch?v=N_mjCxCNYu4

Saludos a mis lectores… si es que tengo alguno.

Tengo un programa para hacer las publicaciones de mis proyectos, este tiene la opción de hacer una copia de seguridad de los ficheros modificados, pero no los comprime.

Hoy voy a explicar cómo usar en .NET el que para mí es el mejor compresor de ficheros, 7zip, el cual además de tener mejor resultados en compresión también es el más rápido.

Introducción a la compresión en .NET

Inicialmente desde la versión 2.0 de Framework, Microsoft nos ofrecía en la librería System.IO.Compression las clases para comprimir DeflateStream y GZipStream.

Las diferencia fundamental entre estas clases radica en que GZipStream originalmente usa el algoritmo de DeflateStream pero se puede extender para que utilice otros formatos de compresión.

Hay un montón de ejemplos en internet, el problema fundamental es a la hora de comprimir una carpeta entera, así que os dejo el ejemplo más completo que he encontrado aquí.

La mayoría de la gente usa otras librerías de terceros como DotNetZip o también SharpZipLib, que son mucho más fácil de manejar y de la que hay también mucha información en Internet.

Pero como bien he dicho al principio de este artículo yo me quedo con el algoritmo LMZA que usa 7zip.

Paquete de Desarrollo de Software LMZA

El creador de 7zi,p Igor Pavlov, muy amablemente nos ha dejado un SDK de LMZA donde tiene un ejemplo para comprimir 1 sólo archivo. Con lo cual no hacemos mucho.

Buscando por Internet nos encontramos con nuestros amigos de CodePlex, que comparten con todos nosotros un paquete de código abierto llamado SevenZipSharp. Esta va a ser la librería que usemos en este artículo. Y la cual nos facilitará la vida para la compresión y descompresión. Por tanto nos descargamos su librería.

Ejemplo

El código que se va a mostrar consta de una solución hecha con VS2010 y un proyecto Windows Forms, tal y como se muestra en la siguiente imagen:

ExploradorSolucion

Consta de un formulario Windows y la librería 7z.dll de la cual hablaremos más adelante. Además se agregará la referencia a la librería de SevenZipSharp.

El formulario tiene la siguiente pinta:

Programa

El formulario básicamente toma un directorio del cuadro de texto y lo comprime con el mismo nombre del directorio y con la extensión 7z.

Para ello he quiero añadirle una barra de progreso que nos indique lo que queda por comprimir, ya que la librería facilita este uso.

Por tanto nos vemos en la necesidad de usar la clase BackgroundWorker, donde no me voy a extender mucho en su explicación.

Por tanto cuando se presiona el botón “Comprimir”, iniciaremos el control de ejecución en segundo plano para controlar el avance de la compresión.

private void button2_Click(object sender, EventArgs e)
{
    if (Directory.Exists(this.textBox1.Text))
    {
        progressBar1.Value = 0;
        object[] parametros = new object[] { this.textBox1.Text };
        backgroundWorker1.RunWorkerAsync(parametros);
    }
    else
    {
        MessageBox.Show("El directorio no existe");
    }
}

El componente BackgroundWorker iniciará la compresión:

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    string ficheroSalida = string.Format("{0}.7z", (string)((object[])e.Argument)[0]);
    try
    {
        comp.CompressDirectory((string)((object[])e.Argument)[0], ficheroSalida, true);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

El objeto “comp” es el objeto de la clase SevenZipCompressor que se ha inicializado en el constructor de la clase:

public FormPrueba()
{
    InitializeComponent();
    // Para que funcione correctamente se debe indicar la ruta a la librería 7z.dll, 
    // aqui lo que hago es incluirla en el proyecto y al estar en el mismo directorio no hace falta decírselo
    //string rutaLib = string.Format("{0}\\7z.dll", Application.StartupPath);
    //SevenZipCompressor.SetLibraryPath(rutaLib);
    comp = new SevenZipCompressor();
    comp.CompressionFinished += new EventHandler<EventArgs>(comp_CompressionFinished);
    comp.Compressing += new EventHandler<ProgressEventArgs>(comp_Compressing);
}

Además se están controlando los eventos de finalización y compresión de la clase SevenZipCompressor. De tal forma que al finalizar el proceso mostraremos al usuario un mensaje diciendo que ha finalizado. Y a medida que se van comprimiendo los ficheros usaremos la barra de progreso del formulario con el siguiente código:

void comp_Compressing(object sender, ProgressEventArgs e)
{
    try
    {
        backgroundWorker1.ReportProgress(e.PercentDone);
    }
    catch (Exception ex)
    {
        string parada = ex.Message;
    }
}

private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
    this.progressBar1.Value = e.ProgressPercentage;
}

Lo único que cabe destacar es la inclusión de la librería de 7zip dentro del proyecto. Esto se debe a que de otra forma tenemos que indicar a la librería SevenZip la ruta de la misma, y de esta forma la encuentra directamente en el directorio de compilación. Para ello recordar que cuando se incluya la librería en el proyecto debes indicarle que se copie en el directorio de resultados.


PropiedadesDll

También tener en cuenta si la versión de instalación de 7zip en vuestro equipo, ya que yo tengo la de 64bit y esto al combinarlo con el proyecto da un error, para ello he tenido que usar la librería de 32bit que os podéis descargar también desde la web.

La solución, por supuesto comprimida con 7zip, la podéis descargar desde aquí el fichero con el nombre “2010WinForm_ComprimiendoFicherosSolution.7z”.

Espero que os sirva de ayuda.

Muchos de los que programamos en .NET usamos el controlador de código Visual Source Safe, primero porque ya lleva tantos años encima que nos hemos acostumbrado a él, segundo porque así nos lo han pedido en algunas empresas y tercero porque podemos llevar las bases de datos en un pendrive y así llevarlas de un sitio a otro.

Pero ¿quién no se ha encontrado en alguna situación donde la base de datos se ha corrompido?. Bueno pues aquí dejo la solución, una línea de comandos que restablecerá los ficheros y nos volverá a dejar trabajar sin dar problemas.

“C:\Archivos de programa\Microsoft Visual SourceSafe\analyze.exe” -FP -V4 -D “K:\programacion\vssbbdd\data”

El comando consiste en lo siguiente:

  1. Llamada al programa Analyze desde su ruta en el disco.
  2. Parámetros de ejecución (mirar en la ayuda de VSS).
  3. Ruta donde están los ficheros de la BBDD de VSS.

Espero que a alguien le pueda venir bien.

A %d blogueros les gusta esto: