visual tag studio code visual-studio-2012 visual-studio-macros

tag - Alternativa a las macros en Visual Studio 2012



visual studio code wrap tag (10)

Utilizo macros extensivamente para las propiedades de ViewModel en el desarrollo de XAML . Los uso aún más en WCF para generar propiedades de Message y DataContract.

Para mi decepción, las macros que he creado no serán utilizables en Visual Studio 2012.

Un ejemplo de lo que estoy hablando, para una VM, entraría en algo como esto.

int id; string name;

Seleccione ambas líneas, ejecute una macro y termine con

private int _id; private string _name; public int Id { get {return _id;} set { if(_id != value) { _id = value; RaisePropertyChanged("Id"); } } public string Name { if(_name != value) { _name = value; RaisePropertyChanged("Name"); } }

Estoy buscando ideas sobre otras soluciones para perder macros.



Estaba muy triste de ver a Macros ir también. Puede acercarse a las sustituciones utilizando la búsqueda de expresiones regulares y reemplazarlas dentro de Visual Studio 2012. En su caso:

Encontrar:

(.*) (.*);

Reemplazar con:

private $1 _$2;/npublic $1 $2/n{/n get {return _$2;}/n set/n {/n if(_$2 = value;/n RaisePropertyChanged("$2");/n }/n}/n

Eso le conseguirá todo, excepto la capitalización de los nombres de las propiedades para las cuales Macros sería mejor.

Pero una ventaja del enfoque de expresión regular es cuando la entrada no es tan simple (por ejemplo, las sentencias DDL de la tabla de la base de datos).

Aquí hay un par de enlaces útiles de MSDN:

Sustituciones en expresiones regulares

Usando expresiones regulares en Visual Studio


Esto es lo que hice para mantener mi funcionalidad macro ...

  1. Descargue e instale el SDK de Visual Studio 2012 here (contiene la plantilla "Paquete de Visual Studio")
  2. Nuevo proyecto -> Installed.Templates.Visual C # .Extensibility.Visual Studio Package

    Página del asistente 1 de 7

    language = C# gen new key is fine, or use another if you have one

    asistente página 3 de 7

    check "menu command"

    Página del asistente 7 de 7

    uncheck both integration and unit test project options

    Haga clic en finalizar

  3. En el archivo .cs:

    using EnvDTE; using EnvDTE80; ... private void MenuItemCallback(object sender, EventArgs e) { MenuCommand cmd = sender as MenuCommand; // This should start to look like familiar macro code... EnvDTE80.DTE2 dte2 = Package.GetGlobalService(typeof(EnvDTE.DTE)) as DTE2; TextSelection selection = (TextSelection)dte2.ActiveDocument.Selection; dte2.UndoContext.Open("macro command replacement"); selection.Text = "inserted from macro replacement"; selection.NewLine(1); dte2.UndoContext.Close(); ...

  4. Ejecute el proyecto. Una nueva instancia de Visual Studio comenzará con el paquete cargado.
  5. Encuentre su comando como la primera entrada en la parte superior del menú Herramientas. Haz clic para ver si funciona.
  6. Para instalar de forma real, vaya a su directorio bin / debug (/ release) y haga doble clic en el archivo .vsix
  7. Debe ser instalado para la próxima vez que corra
  8. Ve al menú Herramientas -> Opciones ... -> entorno.keyboard y asigna una pulsación de tecla a tu herramienta

    Mapping theme : Visual C# 2005 Command : Tool.yourFunctionName (functions defined in the .vsct file)

Si desea más de un comando, deberá agregar identificaciones de menú en PkgCmdID.cs, Guids en Guids.cs, diseños en .vsct y una función en * package.cs (y botón (MenuCommand) en el Función de inicialización) para cada uno. Todo puede hacerse en el mismo proyecto.

Usé este proyecto para crear varias "herramientas" nuevas con mi antiguo código de macro, luego asigné mis claves a ellas. Es mucho más trabajo (y dolores de cabeza) por adelantado, pero no tiene el tiempo de retraso que tenían las macros.

Probablemente haya una forma de hacerlo sin tener que ocupar los menús de herramientas. Empecé a buscar esta última noche y finalmente lo puse a trabajar, así que terminé con esto por ahora (al menos hasta que Microsoft decida dejar esto también).


Hay un complemento, VSScript , para Visual Studio que reemplaza la funcionalidad de macros faltantes. Aunque no utiliza Visual Basic, pero sí el Lua scripts Lua , es posible que desee probarlo.

Hay una grabadora, ventana del editor de código de macros con IntelliSense y un depurador simple. El complemento también admite versiones anteriores de Visual Studio, por lo que si prefiere el idioma Lua en lugar de Visual Basic, puede usarlo en lugar de las macros originales de Visual Studio.


La alternativa más simple a las macros es crear complementos . Lo sé, lo sé, tampoco estaba emocionado por eso, pero en realidad es sorprendentemente fácil. Hay tres partes simples:

  1. Cree el macroproyecto, pasando por la interfaz de usuario del asistente.
  2. Escribe tu código
  3. Copie los archivos .addin y .dll de la macro en su directorio de Addins Visual Studio.

Tomemos un macro simple que escribí para mostrar la página de inicio después de cerrar una solución y convertirla en un complemento.

Crea el macro proyecto

  • Ejecute VS 2012 y cree un nuevo proyecto.
  • Vaya a Plantillas> Otros tipos de proyectos> Extensibilidad y seleccione Complemento de Visual Studio .
  • Ponle un nombre, como ShowStartPage.
  • Haga clic en Aceptar. Esto muestra el Asistente para complementos.
  • Paso a paso por el asistente, eligiendo:
    • Lenguaje de programación: usaremos C #
    • Host de aplicación: VS 2012 debe ser seleccionado
    • Nombre y descripción de tu complemento
    • En la página de opciones de complementos, marque solo la segunda opción ("Me gustaría que mi complemento se cargue cuando se inicie la aplicación host")
    • Pase por encima de las cosas de Acerca de la caja por el momento y haga clic en Finalizar.

Ahora tienes un proyecto de complemento. Esto es lo que haces con eso:

Escribe el código

Abra el archivo Connect.cs . (Puede que ya esté abierto. Algunas de las cosas del "DTE" deberían ser familiares).

Agregue este código a nivel de clase:

SolutionEvents solutionEvents;

Agregue este código al método OnConnection , justo después de _addInInstance = (AddIn)addInInst; línea:

solutionEvents = _applicationObject.Events.SolutionEvents; solutionEvents.AfterClosing += () => { _applicationObject.ExecuteCommand("View.StartPage"); };

Presiona el botón "Ejecutar" para probar tu código. Se inicia una nueva instancia de Visual Studio 2012, con su complemento cargado. Ahora prueba el complemento y asegúrate de que funcione. (Abra una solución, luego ciérrela, la Página de inicio debe regresar cuando lo haga).

Implementarlo

Una vez que el complemento funciona, para usarlo regularmente con Visual Studio 2012, solo necesita implementar dos archivos:

  • ShowStartPage.AddIn (desde su directorio principal de proyectos)
  • ShowStartPage.dll (desde el directorio de compilación de su proyecto, por ejemplo, bin / Debug o bin / Release)

Coloque esos dos archivos en su directorio de complementos VS 2012, que probablemente se encuentre aquí:

C:/Users/[your user name]/Documents/Visual Studio 2012/Addins

Luego, salga y reinicie Visual Studio, y debería ver su complemento funcionando. También debería verlo en la lista cuando vaya a Herramientas> Administrador de complementos.

Si bien esto es un poco más molesto que simplemente abrir el editor de macros y pegar el código de macro allí, tiene la ventaja de que puede usar cualquier idioma que desee, en lugar de quedarse atrapado con el editor tipo VB, algo escamoso. versiones anteriores de Visual Studio.


La extensión Visual Commander (desarrollada por mí) es una alternativa a las macros en Visual Studio 2012/2013/2015. Incluso puede reutilizar su código de macros de Visual Studio existente en nuevos comandos de VB.


La falta de macros de Visual Studio 2012 me estaba deprimiendo, ya que tengo algunas que utilizo literalmente todo el tiempo para insertar pedacitos de texto estándar con una sola pulsación de tecla. Así que escribí un paquete de extensibilidad de scripts muy simple, VSScripts , que permite la manipulación de la selección actual desde un programa de línea de comandos.

Esto no pretende ser un reemplazo completo que lo abarque todo para el antiguo sistema macro, y no proporciona macros de teclado, pero sí permite recrear muchos tipos de macro de manipulación de texto.


Me limitaré a cortar el texto en Notepad++ y usar macros allí, y luego pegar nuevamente. Es una pena que la función ya no esté en Visual Studio 2012 ...


Personalmente, me gusta esta: la extensión Visual Commander te permite automatizar tareas repetitivas en Visual Studio.


Uso Notepad ++ con expresiones regulares como esta:

Encontrar:

public (./*) (.)(.*) //{ get; set; //}

Reemplazar:

private /1 /l(/2)/3; /r/n public /1 /2/3 //{ get //{ return /l(/2)/3; //} /r/n set //{ /l(/2)/3 = value; OnPropertyChanged/(para => this/./2/3/); //}//}