Devo adicionar os arquivos .suo e .user do Visual Studio ao controle de origem?

841

As soluções do Visual Studio contêm dois tipos de arquivos de usuário ocultos. Um é o .suoarquivo de solução, que é um arquivo binário. O outro é o .userarquivo do projeto, que é um arquivo de texto. Exatamente quais dados esses arquivos contêm?

Também estive pensando se devo adicionar esses arquivos ao controle de origem (Subversion no meu caso). Se eu não adicionar esses arquivos e outro desenvolvedor verificar a solução, o Visual Studio criará automaticamente novos arquivos de usuário?

Ben Mills
fonte
9
Os arquivos .suo são recriados automaticamente. Uma ótima maneira de 'atualizar' suas configurações para o padrão, se as coisas quebrarem.
CodingBarfield
3
As práticas recomendadas para projetos do Subversion e Visual Studio são uma pergunta mais genérica sobre esse tópico exato. Além disso, a resposta aceita contém um link para a documentação oficial do MSDN, que descreve em detalhes quais arquivos / diretórios de soluções / projetos do VS devem ser adicionados aos sistemas de controle de origem e quais partes devem ser ignoradas.
Attila Csipak 06/04/19
3
para * .suo, consulte aqui: msdn.microsoft.com/en-us/library/bb165909.aspx
smwikipedia

Respostas:

673

Esses arquivos contêm configurações de preferência do usuário que geralmente são específicas para sua máquina, portanto, é melhor não colocá-lo no SCM. Além disso, o VS o altera quase toda vez que você o executa, por isso sempre será marcado pelo SCM como 'alterado'. Também não incluo, estou em um projeto usando o VS por 2 anos e não tive problemas para fazer isso. O único incômodo menor é que os parâmetros de depuração (caminho de execução, destino de implantação etc.) são armazenados em um desses arquivos (não sei qual). Portanto, se você tiver um padrão para eles, não poderá ' publique 'via SCM para outros desenvolvedores terem todo o ambiente de desenvolvimento' pronto para uso '.

Fabio Ceconello
fonte
22
Cuidado, o arquivo suo armazena informações se o projeto é carregado / descarregado na solução.
Kugel
5
Eu acredito que ele armazena as informações de depuração no arquivo .user (pelo menos para o SQL Server Data Tools). Além disso, quando você altera as configurações na guia Debug, nem sempre persiste o arquivo .user imediatamente (fechar a solução parece funcionar, um pouco chato ... ou alterar outra configuração armazenada no arquivo .sqlproj).
jamiebarrow
87
Você pode abrir os arquivos .user e .csproj em qualquer editor de texto. Acabei de testar copiar e colar as configurações de depuração relevantes do .user no .csproj e excluir o arquivo .user. A depuração continuou funcionando, lendo alegremente as configurações corretas do novo local no arquivo .csproj. Isso deve fornecer uma maneira de confirmar as configurações de depuração sem confirmar o arquivo .user. Certifique-se de colocá-los na configuração correta (depuração, lançamento, etc). Funciona na minha máquina! =)
Chris Nielsen
139

Você não precisa adicioná-los - eles contêm configurações por usuário e outros desenvolvedores não desejam sua cópia.

Steve Cooper
fonte
19
Se você trabalha sozinho em várias máquinas diferentes, vale a pena adicioná-las?
Thepocketwade
33
Eu não, porque pode ser frágil a diferenças inesperadas do sistema; por exemplo, se você trabalha com o x64 no trabalho e o x86 em casa, ele pode sufocar "c: \ arquivos de programas (x86)" e "c: \ arquivos de programas". Não sei, mas não arriscaria.
Steve Cooper
2
Embora eles contenham informações específicas do usuário, mas as informações dos arquivos que foram adicionados recentemente via (incluir no projeto) também estão no arquivo .csproj, eu acho, o que exige que os outros usuários adicionem manualmente todos os recursos do projeto adicionados recentemente. Se alguém souber uma solução alternativa, mencione aqui.
Zeppelin #
69

Outros explicaram por que manter os arquivos *.suoe *.usersob controle de origem não é uma boa ideia.

Gostaria de sugerir que você adicione esses padrões à svn:ignorepropriedade por 2 razões:

  1. Portanto, outros desenvolvedores não terminam com as configurações de um desenvolvedor.
  2. Portanto, quando você exibe o status ou confirma os arquivos, esses arquivos não atrapalham a base de código e ocultam os novos arquivos que você precisa adicionar.
JXG
fonte
Onde e como a svn:ignorepropriedade é definida?
Peter Mortensen
@ PeterMortensen, consulte esta pergunta: stackoverflow.com/questions/86049/…
JXG
Mas há um caso (veja esta resposta ) de adicionar o .user, então alguém pode optar por não ignorar apenas .suo- ou pode ignorar .user, para que seja necessário tomar uma decisão consciente para adicioná-los? Não pense assim, o objetivo svn:ignoreé marcar coisas em que nenhuma decisão consciente é necessária.
PJTraill
49

Não confirmamos o arquivo binário (* .suo), mas confirmamos o arquivo .user. O arquivo .user contém, por exemplo, as opções de inicialização para depurar o projeto. Você pode encontrar as opções de início nas propriedades do projeto na guia "Depuração". Usamos o NUnit em alguns projetos e configuramos o nunit-gui.exe como a opção de início do projeto. Sem o arquivo .user, cada membro da equipe teria que configurá-lo separadamente.

Espero que isto ajude.

Thomas
fonte
4
Também estou começando a pensar que esse deveria ser o caso - confirme o arquivo do usuário para que os desenvolvedores de uma equipe usem as mesmas configurações de depuração. Se eles mudarem em sua própria máquina, ainda assim, desde que a maneira padrão seja a versão no controle de origem.
jamiebarrow
1
Outros sugeriram não fazer isso, mas não tenho certeza de quais podem ser os perigos. Talvez porque o arquivo repo com configurações menos precisas possa explodir a (melhor) cópia local do usuário? (Nossa equipe está usando Mercurial, BTW.)
Jon Coombs
2
A Microsoft recomenda não adicionar o arquivo .user ao controle de origem.
DavidRR
1
Você pode mover as configurações de depuração para o arquivo .csproj, consulte este comentário
Timbo
26

Como encontrei essa pergunta / resposta no Google em 2011, pensei em levar um segundo e adicionar o link para os arquivos * .SDF criados pelo Visual Studio 2010 à lista de arquivos que provavelmente não deveriam ser adicionados ao controle de versão ( o IDE irá recriá-los). Como não tinha certeza de que um arquivo * .sdf possa ter um uso legítimo em outro lugar, ignorei apenas o arquivo [nome do projeto] .sdf específico do SVN.

Por que o assistente de conversão do Visual Studio 2010 cria um enorme arquivo de banco de dados SDF?

Stephen
fonte
2
O arquivo SDF é provavelmente um banco de dados do SQL Server Compact Edition .
Carl G
23

Não, você não deve adicioná-los ao controle de origem, pois, como você disse, eles são específicos do usuário.

SUO (Opções do usuário da solução): registra todas as opções que você pode associar à sua solução para que, toda vez que você a abra, inclua personalizações feitas.

O arquivo .user contém as opções do usuário para o projeto (enquanto SUO é para a solução) e estende o nome do arquivo do projeto (por exemplo, nothing.csproj.user contém configurações do usuário para o projeto nothing.csproj).

JRoppert
fonte
20

Parece ser a opinião da Microsoft sobre o assunto:

Adicionando (e editando) arquivos .suo ao controle de origem

Não sei por que seu projeto armazena o DebuggingWorkingDirectory no arquivo suo. Se essa for uma configuração específica do usuário, considere armazená-la no nome do arquivo * .proj.user. Se essa configuração for compartilhável entre todos os usuários que trabalham no projeto, considere armazená-la no próprio arquivo do projeto.

Nem pense em adicionar o arquivo suo ao controle de origem! O arquivo SUO (opções de usuário do soluton) deve conter configurações específicas do usuário e não deve ser compartilhado entre usuários que trabalham na mesma solução. Se você estiver adicionando o arquivo suo no banco de dados scc, não sei quais outras coisas no IDE você quebraria, mas do ponto de vista do controle de origem, você quebrará a integração scc de projetos da web, o plug-in Lan vs Internet usado por usuários diferentes para acesso ao VSS, e você pode até fazer com que o scc se quebre completamente (o caminho do banco de dados do VSS armazenado no arquivo suo que pode ser válido para você pode não ser válido para outro usuário).

Alin Constantin (MSFT)

Scott W
fonte
Além disso, no MSDN: arquivo de opções do usuário da solução (.Suo) . A primeira frase deixa bem clara a intenção da Microsoft: "O arquivo de opções do usuário da solução (.suo) contém opções de solução por usuário. Esse arquivo não deve ser verificado no controle do código-fonte".
DavidRR
19

Por padrão, o Visual SourceSafe da Microsoft não inclui esses arquivos no controle de origem porque são arquivos de configurações específicos do usuário. Eu seguiria esse modelo se você estiver usando SVN como controle de origem.

cori
fonte
12

O Visual Studio os criará automaticamente. Eu não recomendo colocá-los no controle de origem. Houve inúmeras vezes em que o arquivo SOU de um desenvolvedor local estava fazendo com que o VS se comportasse de maneira irregular na caixa de desenvolvedores. A exclusão do arquivo e, em seguida, a recriação do VS sempre corrigia os problemas.

Bloodhound
fonte
Eu tinha o arquivo .sou sobrando e estava dando um problema ao recarregar os pacotes. A exclusão do arquivo .sou corrigiu o problema. Obrigado.
mercedes
11

No site da MSDN , afirma claramente que

O arquivo de opções do usuário da solução (.suo) contém opções de solução por usuário. Este arquivo não deve ser registrado no controle de código-fonte .

Então, eu diria que é bastante seguro ignorar esses arquivos enquanto faz o check-in no seu controle de origem.

Farax
fonte
9

Eu não faria. Qualquer coisa que possa mudar por "usuário" geralmente não é boa no controle de origem. Diretórios .suo, .user, obj / bin

ScaleOvenStove
fonte
8

Esses arquivos são opções específicas do usuário, que devem ser independentes da própria solução. O Visual Studio criará novos conforme necessário, para que eles não precisem ser registrados no controle de origem. De fato, provavelmente seria melhor não, pois isso permite que os desenvolvedores individuais personalizem seu ambiente como acharem melhor.

benéfico
fonte
7

Você não pode controlar os arquivos .user da fonte, porque isso é específico do usuário. Ele contém o nome da máquina remota e outras coisas dependentes do usuário. É um arquivo relacionado ao vcproj.

O arquivo .suo é um arquivo relacionado ao sln e contém as "opções do usuário da solução" (projeto (s) de inicialização, posição das janelas (o que está ancorado e onde, o que está flutuando), etc.)

É um arquivo binário e não sei se contém algo "relacionado ao usuário".

Em nossa empresa, não colocamos esses arquivos sob controle de origem.

ugasoft
fonte
7

Eles contêm as configurações específicas sobre o projeto que normalmente são atribuídas a um único desenvolvedor (como, por exemplo, o projeto inicial e a página inicial a serem iniciadas quando você depura seu aplicativo).

Portanto, é melhor não adicioná-los ao controle de versão, deixando o VS recriá-los para que cada desenvolvedor possa ter as configurações específicas desejadas.

massimogentilini
fonte
5

.user são as configurações do usuário, e acho que .suo é a solução para as opções do usuário. Você não deseja que esses arquivos estejam sob controle de origem; eles serão recriados para cada usuário.

usuario
fonte
5

Não.

Eu só queria uma resposta muito curta, e não havia nenhuma.

Pablo Carrasco Hernández
fonte
4

Usando o Rational ClearCase a resposta é não. Somente o .sln &. * Proj deve ser registrado no controle do código-fonte.

Não posso responder por outros fornecedores. Se bem me lembro, esses arquivos são opções específicas do "usuário", o seu ambiente.

titanae
fonte
only the .sln & .*proj should be registered- você não esqueceu muitos arquivos aqui?
Lobo
@ Wolf além do óbvio #
Polluks
3

Não adicione nenhum desses arquivos ao controle de versão. Esses arquivos são gerados automaticamente com informações específicas da estação de trabalho, se o check-in estiver no controle de versão que causará problemas em outras estações de trabalho.

Amila
fonte
2

Não, eles não devem estar comprometidos com o controle de origem, pois são configurações locais específicas do desenvolvedor / máquina.

O GitHub mantém uma lista de tipos de arquivos sugeridos para os usuários do Visual Studio ignorarem em https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

Para svn, tenho o seguinte global-ignoreconjunto de propriedades:

* .DotSettings.User
* .onetoc2
* .suo
.vs
Pré-compiladoWeb
thumbs.db
obj
bin
debug
* .user
* .vshost. *
* .Tss
* .dbml.layout

Stephen Kennedy
fonte
1

Se você definir suas dependências dir executáveis ​​em ProjectProperties> Debugging> Environment , os caminhos serão armazenados nos arquivos '.user'.

Suponha que eu defina essa sequência no campo acima mencionado: "PATH = C: \ xyz \ bin" É assim que ela será armazenada no arquivo '.user':

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

Isso nos ajudou muito enquanto trabalhamos no OpenCV. Poderíamos usar diferentes versões do OpenCV para diferentes projetos. Outra vantagem é que foi muito fácil configurar nossos projetos em uma nova máquina. Nós apenas tivemos que copiar os diretórios de dependência correspondentes. Portanto, para alguns projetos, prefiro adicionar o '.user' ao controle de origem.

Mesmo assim, é totalmente dependente de projetos. Você pode atender uma chamada com base em suas necessidades.

adheen
fonte
Links simbólicos também funcionam muito bem para esse fim.
sɐunıɔ ןɐ qɐp
1

Conforme explicado em outras respostas, ambos .suoe .usernão devem ser adicionados ao controle de origem, pois são específicos de usuário / máquina (o BTW .suodas versões mais recentes do VS foi movido para o diretório temporário dedicado.vs , que deve ser mantido completamente fora do controle de origem).

No entanto, se seu aplicativo exigir alguma configuração do ambiente para depuração no VS (essas configurações geralmente são mantidas em .userarquivo), pode ser útil preparar um arquivo de amostra (nomeando-o como .user.SAMPLE) e adicioná-lo ao controle de origem para obter referências.

Em vez de um caminho absoluto codificado nesse arquivo, faz sentido usar os relativos ou confiar em variáveis ​​de ambiente; portanto, a amostra pode ser genérica o suficiente para ser facilmente reutilizada por outras pessoas.

AntonK
fonte