2012-05-28 13 views
13

Lavoro su diversi progetti che utilizzano diversi provider di controllo del codice sorgente. Subversion, Git, TFS, ecc ...Visual Studio 2010 non riconosce il corretto controllo del codice sorgente Plug in

Per lavorare su Subversion, ho installato AnkhSVN. Per lavorare su Git, ho installato il provider Git Source Control Per lavorare su TFS, ... beh, hai capito.

Le informazioni di controllo della sorgente vengono salvate come parte del file di soluzione.

Eppure, invariabilmente, quando apro un nuovo progetto, Visual Studio continua a utilizzare qualunque sia l'ultimo provider di controllo del codice sorgente selezionato. Non sembra prenderlo dal file della soluzione. Devo sempre aprire la finestra di dialogo Strumenti> Opzioni per cambiare fornitore (che richiede SEMPRE!)

È qualcosa che sto facendo male? Mi aspetto che Visual Studio cambi i provider in base alla soluzione aperta.

Se questo è qualcosa che Visual Studio semplicemente non fa, c'è una macro o estensione là fuori che lo capirà automaticamente?

Non riesco a credere che questa domanda non sia stata posta prima, ma non ho visto alcun dupes evidente nell'elenco di StackOverflow di "Domande che potrebbero già avere una risposta". Che, purtroppo, sembra indicare la risposta di "sono solo io".

+0

[Né] (http://stackoverflow.com/questions/6678239/how-to-quickly-switch-source-control-providers-in-visual-studio-2010) di [questi] (http: // stackoverflow.com/questions/5994009/how-to-configure-visual-studio-to-use-diferent-source-control-providers) ha aiutato? – jswolf19

+0

No. Il primo non ha una soluzione reale (il ragazzo ha appena rimosso il suo bisogno di soluzione). E il secondo, sembra che le risposte siano "assicurati che le informazioni sul controllo del codice sorgente siano nella soluzione". E, come ho detto, lo è. –

risposta

1

Visual Studio supporta sicuramente questo. Si prevede che il provider del controllo del codice sorgente conservi una qualche informazione sul file della soluzione su quale provider sia e su quali binding sta usando (se necessario - VSS e TFS lo usano, credo).

Quando VS carica la soluzione, deve prelevare il provider corretto.

Appare dalla tua domanda e dal this question che è rotto in qualche modo.

Potrebbe essere necessario scrivere una macro per farlo. Non è particolarmente difficile. Devi agganciare l'interfaccia SolutionEvents. Non sono sicuro di come si arriva al provider di controllo del codice sorgente configurato. Inizia here.

Con tutto ciò che detto, tuttavia, è che dovrebbe funzionare. Proverei a disabilitare tutti tranne due plugin e vedere se funziona. Quello che sto ottenendo è che forse uno dei provider sta lanciando un'eccezione durante il caricamento della soluzione e VS sta rinunciando agli altri.

+0

Come dici tu i collegamenti SCC persistono nella soluzione sembrano esistere ma sono totalmente infranti. Inoltre, non ha senso in quanto la soluzione potrebbe essere residente in diversi repository con una moltitudine di sistemi RCS. My [extension] (https://visualstudiogallery.msdn.microsoft.com/d99d30fb-3dbc-45f0-8c91-8c103e11f996) risolve il problema in un modo diverso: rileva la presenza di cartelle riservate e carica di conseguenza il provider SCC corretto. – ceztko

2

Non proprio una risposta, ma questo è stato troppo grande per mettere in un commento:

Odio dire "lavora per me", ma, lo fa nel lavoro fatto per me. Sto solo usando AnkhSVN e il client TFS ma Visual Studio passa da uno a due a seconda della soluzione che apro. Quindi quello che stai chiedendo è sicuramente il "supporto" al lavoro. Forse uno degli altri fornitori di plug-in ha un problema?

Avete aperto i file della soluzione e confermato che le informazioni sul controllo del codice sorgente sono presenti? Esso dovrebbe essere simile a questo:

GlobalSection(SubversionScc) = preSolution 
    Svn-Managed = True 
    Manager = AnkhSVN - Subversion Support for Visual Studio 
EndGlobalSection 

GlobalSection(TeamFoundationVersionControl) = preSolution 
    SccNumberOfProjects = 5 
    SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} 
    SccTeamFoundationServer = http://XXXXX:8080/tfs/XXXXX 
    SccProjectUniqueName0 = ... 
    SccProjectName0 = ... 
    SccLocalPath0 = ... 
    <etc> 
EndGlobalSection 

Inoltre, quando si apre una soluzione adeguata, che cosa stai ricevendo indicazione che non è il passaggio fornitori? Riceverai un messaggio di errore o il tuo progetto non apparirà associato al controllo del codice sorgente?In particolare, le mie finestre TFS rimangono aperte e mostrano errori strani quando apro una soluzione SVN, ma il menu di scelta rapida in Esplora soluzioni passa al provider corretto.

+0

Lo so perché, a seconda del plugin di controllo sorgente caricato (AnkhSVN, Git) appariranno diversi effetti visivi (sovrapposizioni di icone che mostrano lo stato dei file, finestre degli strumenti extra che consentono operazioni di controllo del codice sorgente, ecc ...) –

+0

Le finestre aggiuntive non si aprirà o non si chiuderà automaticamente - quelli sono aperti/chiusi in base a ciò che era aperto all'ultima chiusura della soluzione, indipendentemente dal provider SCC. Ma sì, le icone di Solution Explorer dovrebbero essere aggiornate automaticamente. –

+0

Ho controllato il mio file .sln, non ho avuto il GlobalSection per SubversionScc, l'ho aggiunto come sopra, ora VS cambierà le opzioni di controllo del codice sorgente per me quando carico quella soluzione. – jdcook72

5

Il binding del provider di soluzioni è IMO errato poiché la soluzione può essere residente in più sistemi di controllo del codice sorgente. Il trucco è quello di caricare il corretto fornitore di controllo del codice sorgente controllando le directory riservate in un evento di soluzione pre-carico di un'estensione VS. Il codice di base è come segue:

IVsRegisterScciProvider vsRegisterScciProvider = GetService<IVsRegisterScciProvider>(); 
vsRegisterScciProvider.RegisterSourceControlProvider(sccProviderGuid); 

il codice completo per tale estensione è here. Potrei rilasciarlo poco dopo un po 'di test dato che è molto semplice, anche se mi ha richiesto un sacco di ricerche. Non riuscivo a trovare nulla di simile in giro ed è strano per me come dovrebbe essere il modo obbrobrioso di farlo. Anche la documentazione su RegisterSourceControlProvider è stata estremamente fuorviante, quindi questa potrebbe essere la ragione.

+0

Mi piacerebbe provare la tua estensione dopo averla pubblicata. –

+0

Come posso riconoscere un repository TFS? Non ho mai lavorato con questo. – ceztko

+0

Probabilmente dovrai usare l'API TFS. Non aggiunge alcuna cartella nascosta o speciale alla struttura della directory. –

Problemi correlati