remarks cref code c# visual-studio-2010 build tfs2010 solution

cref - params comments c#



¿Cómo puedo construir programáticamente mis archivos de solución desde el código C#? (2)

Tengo una gran solución que contiene muchos proyectos y uno de ellos es un proyecto de instalación. También hay muchas versiones actuales almacenadas en sucursales separadas. Tengo una herramienta de compilación que solía funcionar en .NET 2, pero no ha funcionado desde que actualizamos a .NET 4.

Internamente, la nueva versión .NET 4 de la herramienta de compilación utiliza Microsoft.TeamFoundation.Client.RegisteredTfsConnections.GetProjectCollections() y versionControlServer.GetAllTeamProjects(false) para obtener una colección de TeamProject de mi servidor de control de fuente TFS.

Luego los visualizo visualmente en la interfaz de usuario y cuando un usuario hace clic en una versión de solución en particular, la aplicación llama a lo siguiente para obtener la última versión de la solución:

workspace.Get(new string[] { serverPath }, VersionSpec.Latest, RecursionType.Full, GetOptions.GetAll);

La aplicación utilizada para construir los archivos de la solución y esto incluiría el proyecto de instalación. En esta etapa, el proyecto de instalación crearía un MSI con el que se podría instalar la aplicación. Es este el último paso con el que estoy teniendo problemas.

Necesito ser capaz de construir programáticamente la solución que el usuario seleccionó usando el código C #. El código de trabajo .NET 2 para esto fue el siguiente:

Process process = new Process(); ProcessStartInfo processStartInfo = process.StartInfo; processStartInfo.FileName = processName; processStartInfo.Arguments = string.Format(" /"{0}/" /BUILD /"Release|Any CPU/"", solutionPath); processStartInfo.WorkingDirectory = processDirectory; process.Start();

No hay ningún error cuando se ejecuta, pero ya no inicia Visual Studio y crea el código. Claramente, esta fue una manera pobre de hacerlo inicialmente, pero no puedo encontrar la forma ''correcta'' usando las clases TFS.

También intenté ejecutar MSBuild.exe directamente (similar al ejemplo anterior), y esto construye la solución, pero por alguna razón no crea el proyecto de instalación que produce el MSI. Tenga en cuenta que NO utilizo ningún archivo de compilación creado manualmente.

Desafortunadamente, la documentación útil para el espacio de nombres Microsoft.TeamFoundation es difícil de encontrar. Espero que alguien aquí haya hecho uso de estas clases y pueda dirigirme a una solución a este problema.

Si es posible, necesito usar clases .NET (por ejemplo, no Process.Start) ya que realmente necesito saber cuándo la compilación también ha finalizado. Sin embargo, puedo configurar un objeto FileSystemWatcher para esto si esto es pedir demasiado.


Resultó que el problema lamentablemente no estaba relacionado por completo. El código .NET 2 que se iba a actualizar tenía ''Archivos de programa'' codificados en la ruta del archivo devenv.exe. Sin embargo, los nuevos equipos son de 64 bits y Visual Studio 2010 está instalado en ''Archivos de programa (x86)''.

Esto significa que la muestra del código anterior FUNCIONA y ME PERMITIRÁ construir las soluciones desde C #. No es la manera orientada a objetos que hubiera preferido hacerlo, pero después de todos sus comentarios, estoy contento de haberlo hecho funcionar.

Gracias por su tiempo a todos.


msbuild omite los proyectos del instalador porque no sabe cómo compilarlos. FinalBuilder elimina a devenv.exe para construir estos.

Llamar a `devenv / build" Versión | Cualquier CPU "/ proyecto" MyInstaller.vdproj "debe ejecutar la compilación que necesita desde la línea de comandos, sin iniciar la VS GUI. ¡Intentalo!

Con todo lo dicho: nosotros también usamos FinalBuilder, y VS Installer está en desuso, por lo que es probable que desee planear reemplazarlo.