2012-05-28 23 views
13

Pracuję nad różnymi projektami, które korzystają z różnych dostawców kontroli źródła. Subversion, Git, TFS, etc ...Visual Studio 2010 Nie rozpoznaje właściwej wtyczki kontroli źródła

Do pracy na Subversion, zainstalowałem AnkhSVN. Aby pracować nad Git, zainstalowałem dostawcę Git Source Control Aby pracować na TFS, ... cóż, wpadłeś na pomysł.

Informacje o kontroli źródła są zapisywane jako część pliku rozwiązania.

Jednak niezmiennie, gdy otwieram nowy projekt, Visual Studio używa tego, co ostatnio wybrany dostawca kontroli źródła. Wygląda na to, że nie można go pobrać z pliku rozwiązania. Zawsze muszę otworzyć okno dialogowe Narzędzia> Opcje, aby zmienić dostawców (co trwa NA ZAWSZE!)

Czy to coś, co robię źle? Oczekuję, że Visual Studio zmieni dostawców w oparciu o otwarte rozwiązanie.

Jeśli jest to coś, czego Visual Studio po prostu nie robi, czy istnieje makro lub rozszerzenie, które automatycznie wykryje to?

Nie mogę uwierzyć, że to pytanie nie było wcześniej zadawane, ale nie widziałem żadnych oczywistych duplikatów na liście StackOverflow "Pytania, które mogą już zawierać Twoją odpowiedź". Co, niestety, wydaje się wskazywać na odpowiedź "to tylko ja".

+0

[Ani] (http://stackoverflow.com/questions/6678239/how-to-quickly-switch-source-control-providers-in-visual-studio-2010) z [tych] (http: // stackoverflow.com/questions/5994009/how-to-configure-visual-studio-to-use-diferent-source-control-providers) pomógł? – jswolf19

+0

Nie. Pierwszy nie ma prawdziwego rozwiązania (facet właśnie usunął potrzebę rozwiązania). A drugi, odpowiedzi wydają się "upewnij się, że informacje o kontroli źródła znajdują się w rozwiązaniu". I, jak już powiedziałem, jest. –

Odpowiedz

1

Visual Studio zdecydowanie popiera to. Oczekuje się, że dostawca kontroli kodu źródłowego będzie utrzymywał pewien rodzaj informacji w pliku rozwiązania o tym, który dostawca jest i jakie powiązania używa (w razie potrzeby - VSS i TFS używają tego, jak sądzę).

Gdy VS ładuje rozwiązanie, powinien odebrać odpowiedniego dostawcę.

Wygląda na to z twojego pytania, a od this question jest ono w jakiś sposób uszkodzone.

Być może będziesz musiał napisać makro, aby to zrobić. To nie jest szczególnie trudne. Musisz podłączyć interfejs SolutionEvents. Nie jestem pewien, w jaki sposób uzyskasz skonfigurowanego dostawcy kontroli kodu źródłowego. Rozpocznij here.

Wszystko, co powiedzieliśmy, to jednak powinno zadziałać ,. Spróbowałbym wyłączyć wszystkie oprócz dwóch wtyczek i sprawdzić, czy działa. Dostaję się do tego, że być może jeden z dostawców rzuca wyjątek podczas ładowania rozwiązania, a VS rezygnuje z innych.

+0

Tak jak mówisz, powiązania SCC pozostawione w rozwiązaniu wydają się istnieć, ale są całkowicie zepsute. Również nie ma sensu, ponieważ rozwiązanie może być rezydentne w różnych repozytoriach z wieloma systemami RCS. Moje [rozszerzenie] (https://visualstudiogallery.msdn.microsoft.com/d99d30fb-3dbc-45f0-8c91-8c103e11f996) rozwiązuje problem w inny sposób: wykrywa obecność zarezerwowanych folderów i odpowiednio ładuje odpowiedniego dostawcę SCC. – ceztko

2

Naprawdę nie odpowiedź, ale to było zbyt duże, aby umieścić w komentarzu:

Nienawidzę powiedzieć „działa na mnie”, ale ma to miejsce w rzeczywistości pracy dla mnie. Używam tylko AnkhSVN i klienta TFS, ale Visual Studio przełącza się między nimi dla mnie w zależności od rozwiązania, które otwieram. Więc o co tak naprawdę prosisz, to "wsparcie" do pracy. Być może jeden z innych dostawców wtyczek ma problem?

Czy otworzyłeś swoje pliki rozwiązania i potwierdziłeś, że dostępne są informacje o kontroli źródła? Powinno to wyglądać następująco:

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 

Co więcej, gdy otworzysz odpowiednie rozwiązanie, co oznacza, że ​​nie zmieniasz dostawców? Czy pojawi się komunikat o błędzie, czy też twój projekt po prostu nie pojawia się związany z kontrolą źródła?W szczególności moje okna TFS pozostają otwarte i pokazują dziwne błędy po otwarciu rozwiązania SVN, ale menu kontekstowe w programie Solution Explorer przełącza się na właściwego dostawcę.

+0

Wiem, ponieważ w zależności od wczytanej wtyczki kontroli kodu źródłowego (AnkhSVN, Git) pojawią się różne efekty wizualne (nakładki ikon pokazujące stan plików, dodatkowe okna narzędzi, które umożliwiają operacje kontroli źródła itp.). –

+0

Dodatkowe okna nie otworzy się lub nie zamknie automatycznie - są one otwierane/zamykane w oparciu o to, co było otwarte przy ostatnim zamknięciu rozwiązania, niezależnie od dostawcy SCC. Ale tak, ikony w eksploratorze rozwiązań powinny aktualizować się automatycznie. –

+0

Sprawdziłem mój plik .sln, nie miałem GlobalSection dla SubversionScc, dodałem go jak wyżej, teraz VS przełączy mi opcje Kontroli Źródła po załadowaniu tego rozwiązania. – jdcook72

5

Wiązanie dostawcy rozwiązania jest, IMO, błędne, ponieważ rozwiązanie może być rezydentne w wielu systemach kontroli źródła. Sztuką jest załadowanie odpowiedniego dostawcy kontroli źródła sprawdzającego rezerwowane katalogi w zdarzeniu wstępnego obciążenia rozwiązania rozszerzenia VS. Kod rdzeń jest jak wynikałoby:

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

pełny kod dla takiego rozszerzenia jest here. Mogę go wydać krótko po teście, ponieważ jest bardzo prosty, nawet jeśli wymagało to wielu badań. Nie mogłem znaleźć nic podobnego dookoła i jest to dla mnie dziwne, ponieważ powinno być to obraźliwe. Dokumentacja o numerze RegisterSourceControlProvider była również bardzo myląca, dlatego może być przyczyną.

+0

Chciałbym wypróbować rozszerzenie po jego opublikowaniu. –

+0

Jak rozpoznać repozytorium TFS? Nigdy z nim nie współpracowałem. – ceztko

+0

Prawdopodobnie będziesz musiał użyć interfejsu TFS API. Nie dodaje żadnych ukrytych ani specjalnych folderów do struktury katalogów. –

Powiązane problemy