visual-studio-2010 - muy - mejorar el rendimiento de visual studio
Extensibilidad de Visual Studio 2010: anule la acción de compilación sin afectar el archivo cproj (1)
Estoy trabajando en una forma de conseguir que los proyectos MonoTouch se construyan en Visual Studio 2010 sin requerir un cambio del archivo cproj. Ya casi estoy allí, pero el último paso son los archivos * .xib que tienen una acción de compilación "Página" en los proyectos de MonoTouch.
En Visual Studio 2010 bild action Page invocará el compilador XAML, por lo que para construir el proyecto en VS2010 necesito establecer la acción de compilación en None. El problema al hacer esto es que el archivo .cproj ha cambiado, y tengo que volver a establecerlo en la página antes de construir en MonoTouch.
Entonces mi pregunta es algo como esto. Usando el modelo de extensibilidad de Visual Studio, ¿es posible "interceptar" ciertos tipos de archivos e "ignorarlos" o alterar su tipo de compilación? ¿O es que Visual Studio está creando todo usando msbuild y, por lo tanto, solo se preocupa por lo que realmente está escrito en el archivo .cproj?
Terminé resolviendo este problema usando una estrategia ligeramente diferente. Puede escuchar diferentes eventos de compilación en el objeto DTE y ejecutar el código en su extensión de Visual Studio 2010 antes y después de la compilación.
_dte.Events.BuildEvents.OnBuildBegin += MakeXibsNone;
_dte.Events.BuildEvents.OnBuildDone += MakeXibsPage;
Usando esta estrategia puedo cambiar la acción de compilación a Ninguno antes de la compilación, y luego a la página después de la compilación. El código para cambiar el tipo de construcción simplemente enumera todos los proyectos en la solución y todos los elementos del proyecto en el proyecto. Encuentra todos los archivos con una extensión .xib y cambia la acción de compilación usando el siguiente código:
xib.Properties.Item("ItemType").Value = "Page";
xib.Properties.Item("ItemType").Value = "None";
La implementación completa se puede encontrar en https://github.com/follesoe/VSMonoTouch/blob/master/VSMonoTouch/VSMonoTouchPackage.cs .