¿Debo agregar los archivos .suo y .user de Visual Studio al control de origen?

841

Las soluciones de Visual Studio contienen dos tipos de archivos de usuario ocultos. Uno es el .suoarchivo de solución que es un archivo binario. El otro es el .userarchivo del proyecto , que es un archivo de texto. ¿Qué datos contienen exactamente estos archivos?

También me he estado preguntando si debería agregar estos archivos al control de origen (Subversion en mi caso). Si no agrego estos archivos y otro desarrollador comprueba la solución, ¿Visual Studio creará automáticamente nuevos archivos de usuario?

Ben Mills
fuente
99
Los archivos .suo se recrean automáticamente. Una excelente manera de "actualizar" la configuración predeterminada si las cosas se rompen.
CodingBarfield
3
Las mejores prácticas para proyectos de Subversion y Visual Studio es una pregunta más genérica sobre este tema exacto. Además, la respuesta aceptada contiene un enlace a la documentación oficial de MSDN, que describe en detalle qué archivos / directorios de soluciones / proyectos VS deben agregarse a los sistemas de control de origen, y qué partes deben ignorarse.
Attila Csipak
3
para * .suo, consulte aquí: msdn.microsoft.com/en-us/library/bb165909.aspx
smwikipedia

Respuestas:

673

Estos archivos contienen configuraciones de preferencia del usuario que en general son específicas de su máquina, por lo que es mejor no ponerlo en SCM. Además, VS lo cambiará casi cada vez que lo ejecute, por lo que SCM siempre lo marcará como 'modificado'. No incluyo tampoco, estoy en un proyecto usando VS durante 2 años y no tuve problemas para hacerlo. La única molestia menor es que los parámetros de depuración (ruta de ejecución, destino de implementación, etc.) se almacenan en uno de esos archivos (no sé cuál), por lo que si tiene un estándar para ellos, no podrá ' publíquelo a través de SCM para que otros desarrolladores tengan todo el entorno de desarrollo "listo para usar".

Fabio Ceconello
fuente
22
Tenga cuidado, el archivo suo almacena información si el proyecto se carga / descarga dentro de la solución.
Kugel
55
Creo que almacena la información de depuración en el archivo .user (al menos para las herramientas de datos de SQL Server). Además, cuando cambia la configuración en la pestaña Depurar, no siempre se persiste en .user de inmediato (cerrar la solución parece funcionar, un poco molesto ... o cambiar otra configuración almacenada en el archivo .sqlproj).
jamiebarrow
87
Puede abrir los archivos .user y .csproj en cualquier editor de texto. Acabo de probar copiar y pegar la configuración de depuración relevante del .user en el .csproj, luego eliminé el archivo .user. La depuración continuó funcionando, felizmente leyendo la configuración correcta desde su nueva ubicación en el archivo .csproj. Esto debería proporcionar una forma de confirmar la configuración de depuración sin comprometer el archivo .user. Asegúrese de colocarlos en la configuración correcta (depuración, liberación, etc.). ¡Funciona en mi máquina! =)
Chris Nielsen
139

No es necesario agregarlos: contienen configuraciones por usuario y otros desarrolladores no querrán su copia.

Steve Cooper
fuente
19
Si está trabajando solo en varias máquinas diferentes, ¿valdría la pena agregarlas?
thepocketwade
33
No lo haría, porque puede ser frágil ante diferencias inesperadas del sistema; por ejemplo, si trabaja en x64 en el trabajo y x86 en casa, entonces podría ahogarse con "c: \ archivos de programa (x86)" y "c: \ archivos de programa". No lo sé, pero no me arriesgaría.
Steve Cooper
2
Aunque contienen información específica del usuario, creo que la información de los archivos que se agregan recientemente a través de la opción (incluir en el proyecto) también está en el archivo .csproj, lo que requiere que los otros usuarios agreguen manualmente todos los recursos del proyecto recién agregados. Si alguien conoce una solución, por favor mencione aquí.
zepelín
69

Otros han explicado por qué no es una buena idea tener los archivos *.suoy *.userbajo control de origen.

Me gustaría sugerir que agregue estos patrones a la svn:ignorepropiedad por 2 razones:

  1. Por lo tanto, otros desarrolladores no terminarán con la configuración de un desarrollador.
  2. Por lo tanto, cuando vea el estado o confirme archivos, esos archivos no saturarán la base del código y oscurecerán los nuevos archivos que necesita agregar.
JXG
fuente
¿Dónde y cómo se svn:ignoreestablece la propiedad?
Peter Mortensen
@ PeterMortensen, vea esta pregunta: stackoverflow.com/questions/86049/…
JXG
Pero hay un caso (vea esta respuesta ) para agregar el .user, por lo que uno puede elegir no ignorar solo .suo, o puede ignorar .user, de modo que tome una decisión consciente agregarlos. No lo creas, el punto svn:ignorees marcar cosas donde no se necesita una decisión consciente.
PJTraill
49

No confirmamos el archivo binario (* .suo), pero confirmamos el archivo .user. El archivo .user contiene, por ejemplo, las opciones de inicio para depurar el proyecto. Puede encontrar las opciones de inicio en las propiedades del proyecto en la pestaña "Depurar". Usamos NUnit en algunos proyectos y configuramos nunit-gui.exe como la opción de inicio del proyecto. Sin el archivo .user, cada miembro del equipo tendría que configurarlo por separado.

Espero que esto ayude.

Thomas
fuente
44
También estoy empezando a pensar que este debería ser el caso: confirme el archivo de usuario para que los desarrolladores de un equipo usen la misma configuración de depuración. Si lo cambian en su propia máquina, todavía está bien, siempre que la forma estándar sea la versión en control de fuente.
jamiebarrow
1
Otros han sugerido no hacerlo, pero no estoy seguro de cuáles podrían ser los peligros. ¿Quizás porque el archivo repos con configuraciones menos precisas eliminaría la (mejor) copia local del usuario? (Nuestro equipo está usando Mercurial, por cierto)
Jon Coombs
2
Microsoft desaconseja agregar el archivo .user al control de origen.
DavidRR
1
Puede mover la configuración de depuración a .csproj, vea este comentario
Timbo
26

Desde que encontré esta pregunta / respuesta a través de Google en 2011, pensé en tomar un segundo y agregar el enlace para los archivos * .SDF creados por Visual Studio 2010 a la lista de archivos que probablemente no deberían agregarse al control de versiones ( el IDE los volverá a crear). Como no estaba seguro de que un archivo * .sdf pudiera tener un uso legítimo en otro lugar, solo ignoré el archivo [projectname] .sdf específico de SVN.

¿Por qué el asistente de conversión de Visual Studio 2010 crea un archivo masivo de base de datos SDF?

Stephen
fuente
2
El archivo SDF es probablemente una base de datos de SQL Server Compact Edition .
Carl G
23

No, no debe agregarlos al control de fuente ya que, como usted dijo, son específicos del usuario.

SUO (Opciones de usuario de la solución): registra todas las opciones que puede asociar con su solución para que cada vez que la abra, incluya las personalizaciones que haya realizado.

El archivo .user contiene las opciones de usuario para el proyecto (mientras que SUO es para la solución) y extiende el nombre del archivo del proyecto (por ejemplo, anything.csproj.user contiene configuraciones de usuario para el proyecto anything.csproj).

JRoppert
fuente
20

Esta parece ser la opinión de Microsoft al respecto:

Agregar (y editar) archivos .suo al control de origen

No sé por qué su proyecto almacena el DebuggingWorkingDirectory en el archivo suo. Si esa es una configuración específica del usuario, debería considerar almacenarla en el nombre de archivo * .proj.user. Si esa configuración se puede compartir entre todos los usuarios que trabajan en el proyecto, debería considerar almacenarla en el archivo del proyecto.

¡Ni se te ocurra agregar el archivo suo al control de origen! El archivo SUO (opciones de usuario de solución) está destinado a contener configuraciones específicas del usuario y no debe compartirse entre los usuarios que trabajan en la misma solución. Si agregaría el archivo suo en la base de datos scc, no sé qué otras cosas en el IDE rompería, pero desde el punto de vista del control de origen romperá la integración scc de proyectos web, se utilizó el complemento Lan vs Internet por diferentes usuarios para el acceso VSS, e incluso podría causar que el scc se rompa por completo (la ruta de la base de datos VSS almacenada en el archivo suo que puede ser válida para usted puede no ser válida para otro usuario).

Alin Constantin (MSFT)

Scott W
fuente
Además, desde MSDN: Archivo de opciones de usuario de solución (.Suo) . La primera oración deja bastante clara la intención de Microsoft: "El archivo de opciones de usuario de la solución (.suo) contiene opciones de solución por usuario. Este archivo no debe registrarse en el control del código fuente".
DavidRR
19

De forma predeterminada, Visual SourceSafe de Microsoft no incluye estos archivos en el control de origen porque son archivos de configuración específicos del usuario. Seguiría ese modelo si estás usando SVN como control de fuente.

cori
fuente
12

Visual Studio los creará automáticamente. No recomiendo ponerlos en control de fuente. Ha habido numerosas ocasiones en que el archivo SOU de un desarrollador local estaba causando que VS se comportara de manera errática en esa caja de desarrolladores. Eliminar el archivo y luego dejar que VS lo vuelva a crear siempre solucionó los problemas.

Sabueso
fuente
Me sobró el archivo .sou y estaba dando problemas para recargar los paquetes. Eliminar el archivo .sou solucionó el problema. Gracias.
mercedes
11

En el sitio web de MSDN , establece claramente que

El archivo de opciones de usuario de solución (.suo) contiene opciones de solución por usuario. Este archivo no debe registrarse en el control del código fuente .

Por lo tanto, diría que es bastante seguro ignorar estos archivos al registrar cosas en su control de origen.

Farax
fuente
9

Yo no lo haría Cualquier cosa que pueda cambiar por "usuario" generalmente no es buena en el control de la fuente. Directorios .suo, .user, obj / bin

ScaleOvenStove
fuente
8

Estos archivos son opciones específicas del usuario, que deberían ser independientes de la solución misma. Visual Studio creará nuevos según sea necesario, por lo que no es necesario que se registren para controlar la fuente. De hecho, probablemente sería mejor no hacerlo, ya que esto permite a los desarrolladores individuales personalizar su entorno como mejor les parezca.

benefactual
fuente
7

No puede controlar el origen de los archivos .user, porque eso es específico del usuario. Contiene el nombre de la máquina remota y otras cosas dependientes del usuario. Es un archivo relacionado con vcproj.

El archivo .suo es un archivo relacionado con sln y contiene las "opciones de usuario de la solución" (proyecto (s) de inicio, posición de Windows (qué está acoplado y dónde, qué está flotando), etc.)

Es un archivo binario, y no sé si contiene algo "relacionado con el usuario".

En nuestra empresa no tomamos esos archivos bajo control de origen.

ugasoft
fuente
7

Contienen la configuración específica sobre el proyecto que generalmente se asigna a un único desarrollador (como, por ejemplo, el proyecto de inicio y la página de inicio para comenzar cuando depura su aplicación).

Por lo tanto, es mejor no agregarlos al control de versiones, dejando que VS los vuelva a crear para que cada desarrollador pueda tener la configuración específica que desee.

massimogentilini
fuente
5

.user es la configuración del usuario, y creo que .suo es la opción de usuario de la solución. No desea que estos archivos estén bajo control de origen; serán recreados para cada usuario.

Mella
fuente
5

No.

Solo quería una respuesta realmente corta, y no había ninguna.

Pablo Carrasco Hernández
fuente
4

Usando Rational ClearCase la respuesta es no. Solo el .sln &. * Proj debe registrarse en el control del código fuente.

No puedo responder por otros vendedores. Si recuerdo correctamente, estos archivos son opciones específicas de "usuario", su entorno.

titanae
fuente
only the .sln & .*proj should be registered- ¿No olvidaste muchos archivos aquí?
Lobo
@Wolf además de lo obvio
Polluks
3

No agregue ninguno de esos archivos al control de versiones. Estos archivos se generan automáticamente con información específica de la estación de trabajo, si se registra en el control de versión que causará problemas en otras estaciones de trabajo.

Amila
fuente
2

No, no deberían comprometerse con el control de origen, ya que son configuraciones locales específicas del desarrollador / máquina.

GitHub mantiene una lista de tipos de archivos sugeridos para que los usuarios de Visual Studio ignoren en https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

Para svn, tengo el siguiente global-ignoreconjunto de propiedades:

* .DotSettings.User
* .onetoc2
* .suo
.vs
PrecompiledWeb
thumbs.db
obj
bin
Debug
* .user
* .vshost. *
* .Tss
* .dbml.layout

Stephen Kennedy
fuente
1

Si establece sus dependencias de directorio ejecutable en ProjectProperties> Debugging> Environment , las rutas se almacenan en archivos '.user'.

Supongamos que configuro esta cadena en el campo mencionado anteriormente: "RUTA = C: \ xyz \ bin" Así es como se almacenará en el archivo '.user':

<LocalDebuggerEnvironment>PATH=C:\xyz\bin$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>

Esto nos ayudó mucho mientras trabajaba en OpenCV. Podríamos usar diferentes versiones de OpenCV para diferentes proyectos. Otra ventaja es que fue muy fácil configurar nuestros proyectos en una nueva máquina. Solo tuvimos que copiar los directorios de dependencia correspondientes. Entonces, para algunos proyectos, prefiero agregar '.user' al control de código fuente.

Aunque depende completamente de los proyectos. Puede atender una llamada según sus necesidades.

adheen
fuente
Los enlaces simbólicos también funcionan muy bien para este propósito.
sɐunıɔ ןɐ qɐp
1

Como se ha explicado en otras respuestas, tanto .suoy .userno se debe añadir al control de origen, ya que son de usuario / máquina específica (por cierto .suopara las versiones más recientes de VS fue trasladado al directorio temporal dedicada .vs, que debe mantenerse fuera del control de código fuente completo).

Sin embargo, si su aplicación requiere alguna configuración de entorno para la depuración en VS (tales configuraciones generalmente se guardan en un .userarchivo), puede ser útil preparar un archivo de muestra (nombrándolo como .user.SAMPLE) y agregarlo al control de origen para referencias.

En lugar de una ruta absoluta codificada en dicho archivo, tiene sentido usar los relativos o confiar en variables de entorno, por lo que la muestra puede ser lo suficientemente genérica como para que otros la puedan reutilizar fácilmente.

AntonK
fuente