Compilar solucion visual studio desde consola C#

Iniciado por XKC, 10 Febrero 2017, 16:44 PM

0 Miembros y 1 Visitante están viendo este tema.

XKC

Hola buenas a todos y gracias por vuestra atención.
La cosa es que quiero compilar una solcion de visual studio desde consola, porque lo que quiero hacer es un .bat o otro ejecutable en C# que modifique unos archivos de recursos de una solucion y personalizarla para el usuario, es decir, tengo un programa X que tiene varios archivos de recursos. Lo que quiero es que cada usuario lo pueda personalizar y para ello necesito que edite el archivo txt buscando en su ruta [proyecto/Resources...] y lo edite, y despues compile la solucion.
He encontrado como compilar un archivo .cs, pero yo lo que necesito es compilar todo el proyecto.
Si a alguien se le ocurre una solucion mejor a este problema le estaria muy agradecido.
Muchas gracias a todos,
Saludos.
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

Eleкtro

#1
Hola. Las preguntas sobre C# van en el subforo de programación .NET. ¿Cuando lo van a respetar?, publiquen donde toca...

Cita de: XKC en 10 Febrero 2017, 16:44 PMHe encontrado como compilar un archivo .cs, pero yo lo que necesito es compilar todo el proyecto.

Para compilar una solución de Visual Studio usanbo Batch/CMD, puedes utilizar el executable MSBuild.exe, el cual lo puedes encontrar ubicado en el mismo directorio que el compilador de C# (csc.exe) y el de VB.NET (vbc.exe). Pero es preferible que utilices el archivo devenv.com para compilar la solución, o en su defecto también puedes utilizar la versión gráfica (es decir, la IDE) devenv.exe por linea de comandos.

Aquí tienes la referencia oficial de Microsoft con ejemplos de uso:




Si lo que quieres es compilar una solución de Visual Studio desde una aplicación de C# en modo consola, entonces puedes utilizar el espacio de nombres Microsoft.Build:


Aquí tienes un ejemplo aleatorio: https://bogdangavril.wordpress.com/2012/03/15/take-control-of-msbuild-using-msbuild-api/

Saludos!








XKC

Muchas gracias por responder, y lo siento por publicar donde no debia.
No lo hice con mala intencion, pense que era ese el sitio.
No volvera a ocurrir.
Saludos.
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

Eleкtro

Cita de: XKC en 10 Febrero 2017, 17:49 PM
Muchas gracias por responder, y lo siento por publicar donde no debia.
No lo hice con mala intencion, pense que era ese el sitio.
No volvera a ocurrir.

No te preocupes, no se banea a nadie por equivocarse involuntariamente :xD. Solo que me da rabia que nunca se publique en el subforo correspondiente.

Espero que la información de MSDN te haya servido de ayuda. Si sigues teniendo dudas al respecto, pregunta.

Saludos!








XKC

Cita de: Eleкtro en 10 Febrero 2017, 18:22 PM
No te preocupes, no se banea a nadie por equivocarse involuntariamente :xD. Solo que me da rabia que nunca se publique en el subforo correspondiente.
Comprendo perfectamente, si todos publicamos donde nos da la gana al final esto es un gallinero y loas admin no dais a basto.

Cita de: Eleкtro en 10 Febrero 2017, 18:22 PM
Espero que la información de MSDN te haya servido de ayuda. Si sigues teniendo dudas al respecto, pregunta.
Si, muchisimas gracias, creo que voy a usar la herramienta DevEnv.com para recompilarlo. Porque es la unica forma de hacer eso, no?
¿No se puede modificar un recurso cuando ya ha sido compilado en un exe?
Muchas gracias.
Saludos.
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.

Eleкtro

#5
Cita de: XKC en 10 Febrero 2017, 22:57 PM
creo que voy a usar la herramienta DevEnv.com para recompilarlo. Porque es la unica forma de hacer eso, no?

Te mencioné tres opciones distintas, MSBuild.exe, devenv.com/devenv.exe, y la forma programática desde C# mediante los miembros del namespace Microsoft.Build. Escoje la metodología que prefieras, todas se basan en la API de MSBuild, pero lo ideal en mi opinión sería compilar la solución usando devenv.com puesto que me supone mayor confianza compilar usando la IDE de Visual Studio, y la lógica de Visual Studio se encargaría de automatizar la asignación de ciertos parámetros de compilación de MSBuild (evitando la posibilidad del fallo humano por tu parte).




Cita de: XKC en 10 Febrero 2017, 22:57 PM¿No se puede modificar un recurso cuando ya ha sido compilado en un exe?

Sí, si que se puede. Usando C# puedes utilizar los miembros del namespace System.Resources para administrar (crear, "editar", añadir o eliminar) recursos contenidos en un archivo de recursos de .NET (archivo.resx), pero es algo tedioso (no complejo, solo tedioso) y en tu caso pides hacerlo sobre un executable ya compilado por lo que resultaría bastante más tedioso todavía, puesto que habría que identificarlo, extraerlo, editarlo, y "reinsertarlo".

Quizas haciendo uso de Reflection se pueda simplificar la mayor parte de la tarea, no estoy muy seguro... pues nunca he intentado hacer lo que necesitas (me refiero a tratar de editar un archivo de recursos de .NET de una aplicación externa de forma programática), pero una manera sencillita tal vez sería desensamblando el executable con ILDASM, editar el archivo de recursos, y reensamblarlo todo de nuevo.
Aquí tienes un ejemplo de ello: https://web.archive.org/web/20150524075952/https://fortheloveofcode.wordpress.com/2007/09/24/change-resources-inside-assembly/ -el paso nº2 quizás puedas reemplazarlo por el uso del namespace System.Resources.
Por último y por si te sirve de algo aquí tienes un ejemplo de una class que desarrollé para administrador recursos .NET sacada de mi API de pago ElektroKit: http://pastebin.com/L6n158ua -esto es solo para que puedas hacerte una idea de como usar los miembros de System.Resources para editar recursos, el código no es funcional puesto que depende de otros miembros de la librería (es un código demasiado extenso como para mostrarlo aquí y ahora) pero bueno. si te quedas con dudas en Google siempre puedes buscar solución a como añadir/eliminar/reemplazar/etc un recurso con C#.

¡Saludos!








XKC

Cita de: Eleкtro en 11 Febrero 2017, 00:49 AM
Te mencioné tres opciones distintas, MSBuild.exe, devenv.com/devenv.exe, y la forma programática desde C# mediante los miembros del namespace Microsoft.Build. Escoje la metodología que prefieras, todas se basan en la API de MSBuild, pero lo ideal en mi opinión sería compilar la solución usando devenv.com puesto que me supone mayor confianza compilar usando la IDE de Visual Studio, y la lógica de Visual Studio se encargaría de automatizar la asignación de ciertos parámetros de compilación de MSBuild (evitando la posibilidad del fallo humano por tu parte).




Sí, si que se puede. Usando C# puedes utilizar los miembros del namespace System.Resources para administrar (crear, "editar", añadir o eliminar) recursos contenidos en un archivo de recursos de .NET (archivo.resx), pero es algo tedioso (no complejo, solo tedioso) y en tu caso pides hacerlo sobre un executable ya compilado por lo que resultaría bastante más tedioso todavía, puesto que habría que identificarlo, extraerlo, editarlo, y "reinsertarlo".

Quizas haciendo uso de Reflection se pueda simplificar la mayor parte de la tarea, no estoy muy seguro... pues nunca he intentado hacer lo que necesitas (me refiero a tratar de editar un archivo de recursos de .NET de una aplicación externa de forma programática), pero una manera sencillita tal vez sería desensamblando el executable con ILDASM, editar el archivo de recursos, y reensamblarlo todo de nuevo.
Aquí tienes un ejemplo de ello: https://web.archive.org/web/20150524075952/https://fortheloveofcode.wordpress.com/2007/09/24/change-resources-inside-assembly/ -el paso nº2 quizás puedas reemplazarlo por el uso del namespace System.Resources.
Por último y por si te sirve de algo aquí tienes un ejemplo de una class que desarrollé para administrador recursos .NET sacada de mi API de pago ElektroKit: http://pastebin.com/L6n158ua -esto es solo para que puedas hacerte una idea de como usar los miembros de System.Resources para editar recursos, el código no es funcional puesto que depende de otros miembros de la librería (es un código demasiado extenso como para mostrarlo aquí y ahora) pero bueno. si te quedas con dudas en Google siempre puedes buscar solución a como añadir/eliminar/reemplazar/etc un recurso con C#.

¡Saludos!
Muchas gracias, voy a probar los dos metodos a ver que tal.
Saludos.
Para poder atacar y vencer con seguridad, ataca donde ellos no puedan defenderse.
Para defenderte y resistir firme, defiéndete en donde ellos no atacarán.