¿Cómo obtengo la última versión de una solución de Visual Studio desde la línea de comandos?

StackOverflow https://stackoverflow.com/questions/34204

Pregunta

¿Cómo obtengo la última versión de mi solución de forma recursiva como se hace en el menú contextual del explorador de soluciones de Visual Studio?Quiero hacer esto desde la línea de comando o mediante una macro.Estoy intentando automatizar una parte de mi rutina diaria mediante el uso de un conjunto de archivos por lotes.Estoy seguro de que a muchos desarrolladores les encantaría tener algo como esto.

tf get solo obtiene el contenido de una carpeta de forma recursiva (no es una solución).No analiza las dependencias del proyecto, etc.Eso no funcionará.

¿Fue útil?

Solución

TFS tiene un SDK .NET que le permite crear sus propios programas personalizados que interactúan con un servidor TFS.Podrías escribir un pequeño programa que realice la tarea que necesitas:

TeamFoundationServer tfs = TeamFoundationServerFactory.GetServer("MyServer");
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

WorkSpace[] myWorkSpaces = vcs.QueryWorkSpaces("MyWorkSpaceName", "MyLoginName", "MyComputer");

myWorkSpaces[0].Get(VersionSpec.Latest, GetOptions.GetAll);

Otros consejos

Acepto que el Explorador de soluciones omitirá "por diseño" todos esos objetos, pero solo si no los incluye como elementos de la solución, lo cual creo que sí debería Incluya en sus soluciones, para que un novato pueda abrir la solución, obtener la última versión y saber que tiene todas las dependencias necesarias para esa solución, y no tener que aprender cómo hacerlo a través de una herramienta de línea de comandos o usar el control de código fuente. Explorador si no quieren.

Incluir todas las dependencias que no son de código como elementos de la solución (organizamos las carpetas de la solución usando la misma estructura de carpetas que sus carpetas de control de código fuente) reduce el conocimiento "vudú" necesario para abrir y compilar la solución para los nuevos desarrolladores de un proyecto.

Sería bueno si pudiera vincular árboles de carpetas completos a una carpeta de solución en la solución VS.

Si tiene proyectos dependientes en una carpeta diferente.Use esto para recorrer todos los subdirectorios y obtener lo último para cada proyecto:

Comience en el directorio principal C:\Project\SupportingProjects

FOR /D %%G IN ("*") DO ECHO ..from....%%G && tf get C:\Projects\SupportingProjects\%%G 

::Get the latest for the Main project
tf get C:\Projects\MainProject /recursive 

En mi caso, la carpeta MainProject contiene el archivo de la solución y el archivo del proyecto.

Esto me pareció fácil y sencillo.

Más sobre el comando FOR: http://ss64.com/nt/for_d.html

Bien...Parece que tienes tres opciones.

  1. En su archivo por lotes, emita un tf get en cada rama del directorio que desee.

  2. Reorganice su solución para que todas las dependencias estén en la misma ruta raíz.

  3. Utilice la forma visual de hacer clic derecho en el proyecto cargado y emitir el comando get.

El único momento en el que realmente reconoce la solución es cuando el proyecto se carga en el IDE;o cuando lo cargan los servidores de compilación.

Sé que mencionaste archivos por lotes, pero déjame decirte algo más.

Supongo que estás utilizando la versión 2005 de TFS.2008 tiene todo el material de programación incorporado.

Sin embargo, también podrías utilizar CruceroControl.net para realizar compilaciones programadas para usted.He usado TFS 2008 y CruiseControl y ambos parecen funcionar bien.

Una solución más posible es utilizar PowerShell.El siguiente enlace es a un ejemplo de proyecto de código que muestra cómo obtener una solución de TFS y compilarla localmente.Powershell es una solución mucho mejor que los archivos por lotes normales.

http://www.codeproject.com/KB/install/ExtractAndBuild.aspx

No hagas esto.VS no es tan inteligente como crees.(Como lo demuestran los misteriosos e inútiles pagos que todos hemos experimentado durante más de 3 ciclos de productos, incluidos usted y yo.¡Esta no es la marca de un sistema confiable!)

Lo que usted describe solo funciona para referencias de proyecto a proyecto.La ejecución de operaciones de control de fuente desde el Explorador de soluciones "por diseño" omitirá:

  • referencias del proyecto al ensamblaje
  • Vídeo, sonido, archivos PDF y cualquier otro tipo de medio que VS no admita pero que pueda desempeñar un papel integral en el producto.
  • MSBuild *.targets archivos a los que se hace referencia en sus proyectos
  • cualquier archivo de cualquier tipo al que se haga referencia desde objetivos personalizados
  • cualquier ejecutable de terceros requerido por el proceso de compilación
  • etc.

Sólo decir No a una sincronización incompleta.En ese camino sólo habrá dolores de cabeza.

Ejecute 'tf get' sin alcance de ruta desde la línea de comando, o haga clic derecho -> Obtener desde el nodo raíz $/ en Source Control Explorer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top