Categories
.NET Utilidades

Reflexil, modifica ensamblados .NET desde Reflector

En un comentario del artículo donde mencionaba algunas características de Cecil, me hacían conocer la existencia de NetDasm, que es una herramienta para modificar ensamblados .NET. Semanas después, supe de la existencia de Reflexil, que a diferencia del anterior, éste es un plugin para Reflector

Reflexil, modifica ensamblados .NET desde Reflector

En la última versión, este plugin permite modificar el código tanto en IL como C#. Pueden descargar los binarios o el código fuente.

Categories
.NET Utilidades Windows Forms

Habilitar la corrección de ortografía en Windows Live Writer

Si algunos usan la versión en inglés de Windows Live Writer y un sistema operativo en español para escribir textos (en inglés obviamente), se habrán dado cuenta que la corrección de ortografía no funciona bajo estas condiciones.

Para solucionar este problema, lo único que tienen que hacer es crear una pequeña aplicación que ejecute Windows Live Writer en un dominio de aplicación personalizado:

csharp:

using System.Globalization;
using System.Threading;

class Program
{
        static void Main()
        {
                string exe = @"C:\Archivos de programa\Windows Live Writer\WindowsLiveWriter.exe";
               
                System.AppDomain app = System.AppDomain.CreateDomain(exe);
                Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
               
                app.ExecuteAssembly(exe);
        }
}

Si alguien quiere ahorrarse un poco de tiempo, puede descargar el ejecutable que preparó Roy Osherove.

Categories
Microsoft Utilidades WordPress

Nueva versión de Windows Live Writer

Esta semana se liberó una nueva versión del software que en la mayoría de los casos uso para escribir entradas, hablo de Windows Live Writer. Luego de jugar por un momento con las cosas que trae esta versión, les comento mis impresiones:

Lo bueno

  • Posibilidad de agregar nuevas categorías: me resulta particularmente útil esta opción porque casi siempre voy añadiendo nuevas categorías. 🙂
  • Soporte para especificar resúmenes (excerpt) de las entradas: esta opción me sirve para personalizar el meta description de cada entrada que se publica.
  • Sincronización con las ediciones que se hacen en línea.
  • Pegado especial: dá la posibilidad de remover el formato antes de pegar texto.

Lo malo

  • Sigue siendo igual de pesado que la versión anterior, se notan pequeños parpadeos al momento de hacer ciertas acciones.
  • Por el momento no soporta la corrección de ortografía para nuestro idioma.

Lo feo

  • No genera (X)HTML válido, sigue existiendo problemas con elementos <li> que no tienen un correspondiente tag de cierre </li>; por otro lado, sigue enviando atributos (no estándar) que sólo se usan para facilitar el trabajo de algunos plugins. Al parecer en esta versión tampoco existe una forma de escribir un plugin que actúe justo antes de publicar las entradas (esto sería útil para limpiar el HTML).

Si alguien desea usar esta nueva versión puede descargarlo desde http://g.msn.com/4SAWLWENUS/WriterMSI.

Categories
.NET ASP.NET Desarrollo de Software Utilidades Web Windows Forms

Reflector 5.0

Al parecer ayer se liberó una nueva versión de Reflector, una herramienta muy útil que permite explorar, analizar, ver, etc. los ensamblados de .NET.

Entre las novedades que trae esta versión, están:

  • Soporte para LINQ y el .NET Framework 3. 5
  • Existe un nuevo protocolo "code://" que hace que Reflector cargue el tipo especificado, por ejemplo code://System.Web/System.Web.HttpResponse/TransmitFile(String) debería ubicarlos en el método TransmitFile de la clase HttpResponse.
  • Existe la posibilidad de registrar una extensión (Reflector.exe /register) para que cada vez que se haga click derecho sobre un ensamblado compatible con .NET, aparezca una opción "Browse with .NET Reflector" en el menú contextual.

Para sacarle más provecho a esta herramienta, se pueden agregar plugins de acuerdo a las necesidades que tenga uno.

Categories
.NET Desarrollo de Software Utilidades Windows Forms

Zoner & Seguridad de Acceso a Código

Los que han estado desarrollando aplicaciones de escritorio con .NET, seguramente saben que el CLR es el encargado de lo que puede o no hacer una aplicación en función a los permisos que reciba.

Code Access Security

Por si no saben todavía de la existencia de Zoner, ésta es una pequeña herramienta que permite probar si una determinada aplicación funciona o no en una zona determinada.

Este es el código de Zoner:

csharp:

using System;
using System.Reflection;
using System.Security;
using System.Security.Policy;

class App
{
    public static void Main(String[] args)
    {
        try
        {
            SecurityZone zone = SecurityZone.Internet;
            String url = "http://www.IBuySpy.com";
            String exe;
            String[] newArgs = null;

            for (Int32 index = 0; ; index++)
            {
                if (args[index][0] != '-' && args[index][0] != '/')
                {
                    exe = args[index];
                    newArgs = new String[args.Length - (index + 1)];
                    Array.Copy(args, index + 1, newArgs, 0, newArgs.Length);
                    break;
                }

                String setting = args[index].Substring(3);

                switch (args[index].ToUpper()[1])
                {
                    case 'Z': // Set zone
                        zone = (SecurityZone) Enum.Parse(typeof(SecurityZone), setting, true);
                        break;
                    case 'U': // Set url
                        url = setting;
                        break;
                    default:
                        throw (new ApplicationException());
                }
            }
            StartApp(exe, newArgs, zone, url);
        }
        catch (ArgumentException)
        {
            Usage();
        }
        catch (IndexOutOfRangeException)
        {
            Usage();
        }
        catch (ApplicationException) { Usage(); }
    }
    static void Usage()
    {
        Console.WriteLine(
           "Usage: zoner /u:[url] /z:[zone] [Executable File]\n" +
           "[url]\tUrl indicating the source of this .exe");
        Console.WriteLine();
        Console.Write("[zone]");
       
        String[] zones = Enum.GetNames(typeof(SecurityZone));
        foreach (String zone in zones)
        {
            Console.WriteLine("\t{0}", zone);
        }
        Console.WriteLine(
           "\nDefault:  zoner /u:http://www.IBuySpy.com /z:Internet");
    }
   
    static void StartApp(String exe,
       String[] newArgs, SecurityZone zone, String url)
    {
        Evidence evidence = new Evidence();

        evidence.AddHost(new Zone(zone));
        evidence.AddHost(new Url(url));
        AppDomain app = AppDomain.CreateDomain(exe, evidence);
        app.ExecuteAssembly(exe, evidence, newArgs);
    }
}

Lo que hace esta porción de código, es simplemente ejecutar en otro dominio la aplicación que se quiere probar, pero adjuntando información de la zona escogida.

Espero que esta pequeña utilidad les ayude a ahorrar un poco de tiempo :).