È necessario eseguire il commit di un .sln nel controllo del codice sorgente?


101

È consigliabile eseguire il commit di un file .sln nel controllo del codice sorgente? Quando è appropriato o inappropriato farlo?

Aggiornamento Ci sono stati molti punti positivi nelle risposte. Grazie per le risposte!


21
Credo che sia il file .SUO che NON vuoi impegnare.
apandit

Solo per la cronaca, credo che gli elenchi di attività (se li usi) siano memorizzati nel file .SUO ... Quindi, anche se potresti non volerli impegnare nel controllo del codice sorgente, potresti non volerli 'semplicemente cancellarli' come cruft estraneo.
Benjol

Risposte:


69

Penso che sia chiaro dalle altre risposte che i file della soluzione sono utili e dovrebbero essere impegnati, anche se non sono usati per build ufficiali. Sono utili per chiunque utilizzi funzionalità di Visual Studio come Vai a definizione / dichiarazione.

Per impostazione predefinita, non contengono percorsi assoluti o altri artefatti specifici della macchina. (Sfortunatamente, alcuni strumenti aggiuntivi non mantengono correttamente questa proprietà, ad esempio AMD CodeAnalyst.) Se stai attento a utilizzare percorsi relativi nei tuoi file di progetto (sia C ++ che C #), saranno indipendenti dalla macchina pure.

Probabilmente la domanda più utile è: quali file dovresti escludere? Ecco il contenuto del mio file .gitignore per i miei progetti VS 2008:

*.suo
*.user
*.ncb
Debug/
Release/
CodeAnalyst/

(L'ultima voce è solo per il profiler AMD CodeAnalyst.)

Per VS 2010, dovresti anche escludere quanto segue:

ipch/
*.sdf
*.opensdf

2
Ho anche una regola per ignorare i risultati degli unit test. Alcune persone potrebbero registrarli, ma non mi piace il disordine
Matthew Whited,

9
+1 - Personalmente non commetto nulla che venga costruito, quindi bin / e obj /
Steven Evers

Eseguo solo il commit dei file .sln che contengono più di 1 progetto
Justin

2
ecco la mia versione globale di subversion ignora: * .vsmdi * .suo * / [Bb] in [Bb] in * / obj obj TestResults *. [Uu] ser * Thumbs.db * Web.Publish.xml * WebApplication.Publish. xml * Web.log
Merritt

Di seguito è riportato un file .gitignore comunemente condiviso che include file temporanei, risultati di compilazione e file generati dai componenti aggiuntivi di Visual Studio più diffusi.
Lauren Van Sloun

58

Sì, penso sia sempre appropriato. Le impostazioni specifiche dell'utente si trovano in altri file.


3
Sicuramente il .sln ha riferimenti ai file .prj (progetti)
dplante

20

Sì, dovresti farlo. Un file di soluzione contiene solo informazioni sulla struttura complessiva della soluzione. Le informazioni sono globali per la soluzione ed è probabile che siano comuni a tutti gli sviluppatori del progetto.

Non contiene impostazioni specifiche dell'utente.


13

Dovresti assolutamente averlo. Oltre alle ragioni menzionate da altre persone, è necessario rendere possibile la costruzione in un unico passaggio dell'intero progetto.


8

In genere sono d'accordo sul fatto che i file della soluzione debbano essere archiviati, tuttavia, presso l'azienda per cui lavoro abbiamo fatto qualcosa di diverso. Abbiamo un repository abbastanza grande e gli sviluppatori lavorano di tanto in tanto su parti diverse del sistema. Per supportare il modo in cui lavoriamo avremmo un unico file di soluzione grande o diversi file più piccoli. Entrambi hanno alcuni difetti e richiedono un lavoro manuale da parte degli sviluppatori. Per evitare ciò, abbiamo creato un plug-in che gestisce tutto ciò.

Il plug-in consente a ogni sviluppatore di estrarre un sottoinsieme dell'albero dei sorgenti su cui lavorare semplicemente selezionando i progetti rilevanti dal repository. Il plugin quindi genera un file di soluzione e modifica al volo i file di progetto per la soluzione data. Gestisce anche i riferimenti. In altre parole, tutto ciò che lo sviluppatore deve fare è selezionare i progetti appropriati e quindi i file necessari vengono generati / modificati. Questo ci consente anche di personalizzare varie altre impostazioni per garantire gli standard aziendali.

Inoltre, utilizziamo il plug-in per supportare varie politiche di check-in, che generalmente impediscono agli utenti di inviare codice difettoso / non conforme al repository.


Sembra che questa potrebbe essere la risposta a una delle mie domande a lungo senza risposta ( stackoverflow.com/questions/1490728/… ), qualche possibilità di ottenere una copia di questo plugin?
Benjol

@ Benjol: Scusa, no, è uno strumento interno. Oltre alle funzionalità di cui sopra, si integra anche con una serie di altri sistemi interni, quindi è molto specifico per come gestiamo le cose. Se hai solo bisogno della soluzione / parte del progetto, non è così difficile da implementare.
Brian Rasmussen

OK, solo una cosa, nella tua "grande soluzione" hai riferimenti a progetti o riferimenti a file? E se uno sviluppatore aggiunge un nuovo riferimento a un file / progetto, il plug-in esegue la conversione appropriata prima del check-in? E come gestisci le dipendenze che lo sviluppatore non ha scelto di controllare?
Benjol

8

Sì, le cose che dovresti impegnarti sono:

  • soluzione (* .sln),
  • file di progetto,
  • tutti i file sorgente,
  • file di configurazione dell'app
  • costruire script

Le cose che non dovresti impegnare sono:

  • file delle opzioni utente della soluzione (.suo),
  • compilare i file generati (ad esempio utilizzando uno script di compilazione) [Modifica:] - solo se tutti gli script e gli strumenti di compilazione necessari sono disponibili sotto il controllo della versione (per garantire che le compilazioni siano autentiche nella cronologia di cvs)

Per quanto riguarda altri file generati automaticamente, c'è un thread separato .


1
Non sono d'accordo con "qualsiasi file generato automaticamente".
Mehrdad Afshari,

@ Mehrdad, pensi che anche i file Intelisense dovrebbero essere impegnati?
Edison Gustavo Muenz

1
@Edison: No. Mi riferisco a file sorgente generati automaticamente come il contesto dati LINQ to SQL, ad esempio.
Mehrdad Afshari,

2
I file Formname.Designer.cs non vengono considerati generati automaticamente?
jasonh

1
Quello che volevo dire erano i file generati durante il tempo di compilazione. Lo trovo spesso: qualcuno esegue il commit di un file che viene creato automaticamente, quindi SVN segnala una modifica solo perché è stato modificato un commento.
Groo

5

Sì, dovrebbe far parte del controllo del codice sorgente. Ogni volta che aggiungi / rimuovi progetti dalla tua applicazione, .sln viene aggiornato e sarebbe bene averlo sotto il controllo del codice sorgente. Ti consentirebbe di estrarre le versioni del codice dell'applicazione 2 indietro e di eseguire direttamente una build (se necessario).


5

Nella maggior parte dei casi, è una buona idea eseguire il commit dei file .sln nel controllo del codice sorgente.

Se i tuoi file .sln sono generati da un altro strumento (come CMake), probabilmente è inappropriato metterli nel controllo del codice sorgente.


4

Sì, vuoi sempre includere il file .sln, include i collegamenti a tutti i progetti che sono nella soluzione.


2

Lo facciamo perché mantiene tutto sincronizzato. Tutti i progetti necessari si trovano insieme e nessuno deve preoccuparsi di perderne uno. Il nostro server di compilazione (Ant Hill Pro) utilizza anche sln per capire quali progetti costruire per una versione.


2

Di solito mettiamo tutti i nostri file di soluzioni in una directory di soluzioni. In questo modo separiamo un po 'la soluzione dal codice ed è più facile scegliere il progetto su cui devo lavorare.


1

L'unico caso in cui potresti anche considerare di non memorizzarlo nel controllo del codice sorgente sarebbe se avessi una grande soluzione con molti progetti che era nel controllo del codice sorgente e volessi creare una piccola soluzione con alcuni dei progetti dalla soluzione principale per alcuni requisito transitorio privato.


1

Sì, tutto ciò che viene utilizzato per generare il prodotto dovrebbe essere nel controllo del codice sorgente.


1

Conserviamo o risolviamo i file in TFS Version Control. Ma poiché la soluzione principale o è davvero grande, la maggior parte degli sviluppatori ha una soluzione personale contenente solo ciò di cui hanno bisogno. Il file della soluzione principale viene utilizzato principalmente dal server di compilazione.


0

.slns sono l'unica cosa con cui non abbiamo avuto problemi in tfs!


1
È divertente ... gli SLN erano gli unici file che ho mai dovuto correggere ... ma i problemi sono stati causati dal fatto che gli sviluppatori non stessero attenti alle fusioni.
Matthew Whited
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.