Sharepoint 2010 – Excepción (String was not recognized as a valid DateTime) al agregar una nueva versión en un DocumentSet

Si estas trabajando sobre Sharepoint 2010 y obtienes un bonito error (String was not recognized as a valid DateTime) al intentar, programaticamente, agregar una nueva versión con un código parecido a este:

DocumentSet.VersionCollection.Add(true, "");

Entonces es que has sido víctima de una actualización de DLL (Microsoft.Office.documentmanagement.dll) de Microsoft, concretamente a partir de la CU de Agosto 2012 el multi-idioma ya no funciona y no se pueden crear versiones de los DocumentSet.

Sigue leyendo

Volver a registrar asp.net si se ha instalado después que IIS

Si en tu equipo de desarrollo o producción te ha sucedido que antes de instalar el IIS instalaste el framework de .net (algo muy común en equipos de desarrollo, la verdad) tienes que volver a registrar el framework para que tu IIS pueda volver a hacer uso de ella.

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -I

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -I

Los ejemplos que se han a mostrado solo incluyen el framework x86 pero si tu equipo dispone de la versión x64 además de la x86 también tendrás que hacer lo mismo pero buscando la ubicación de la versión x64.

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727>aspnet_regiis.exe -I

C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe -I

Como obtener el nombre del dominio de NetBios de un equipo en .NET

Para poder obtener información de netbios nos vamos a tener que meter en código de bastante bajo nivel por lo que para poder usarlo en .NET vamos a recurrir a las pinvoke

    using System.Runtime.InteropServices;
    using System.ComponentModel;

    public class NetUtil
    {
        [DllImport("netapi32.dll", CharSet = CharSet.Auto)]
        static extern int NetWkstaGetInfo(string server,
            int level,
            out IntPtr info);

        [DllImport("netapi32.dll")]
        static extern int NetApiBufferFree(IntPtr pBuf);

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        class WKSTA_INFO_100
        {
            public int wki100_platform_id;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string wki100_computername;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string wki100_langroup;
            public int wki100_ver_major;
            public int wki100_ver_minor;
        }

        public static string GetMachineNetBiosDomain()
        {
            IntPtr pBuffer = IntPtr.Zero;

            WKSTA_INFO_100 info;
            int retval = NetWkstaGetInfo(null, 100, out pBuffer);
            if (retval != 0)
                throw new Win32Exception(retval);

            info = (WKSTA_INFO_100)Marshal.PtrToStructure(pBuffer, typeof(WKSTA_INFO_100));
            string domainName = info.wki100_langroup;
            NetApiBufferFree(pBuffer);
            return domainName;
        }
    }

Tras colocar el código anterior en una clase de nuestro proyecto ya podremos obtener el dominio usando:

   NetUtil.GetMachineNetBiosDomain()

Obtener el hostname y el dominio en .NET

Obtener el hostname y el dominio usando el lenguaje .NET y más concretamente C# es sencillo, no requiere de funciones complejas ni nada por el estilo.

Obtener el hostname:

El hostname se puede obtener con tan solo una linea, «System.Environment.MachineName» nos devolverá el nombre de la máquina donde se ejecuta.

Obtener el dominio o el grupo de trabajo:

Antes de nada debemos comprobar que nuestro proyecto tiene agregadas las referencias a System.Management, en caso negativo tenemos que agregarlas. Una vez que ya tengamos las referencias bien metidas hacemos lo siguiente:

System.Management.SelectQuery query = new System.Management.SelectQuery("Win32_ComputerSystem");
System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(query);
 foreach (System.Management.ManagementObject mo in searcher.Get())
 {
  string Dominio = mo["domain"] as string;
 }

En la variable Dominio ya tendremos guardado el valor que actualmente tenga la máquina donde se ejecuta.