Подтвердить что ты не робот

Visual Studio 2010 Не распознает правильное подключение к источнику питания

Я работаю над разными проектами, использующими разные поставщики контроля версий. Subversion, Git, TFS и т.д.

Чтобы работать с Subversion, я установил AnkhSVN. Чтобы работать с Git, я установил поставщик контроля источника Git Чтобы работать с TFS,... ну, вы поняли идею.

Информация о контроле источника сохраняется как часть файла решения.

Тем не менее, неизменно, когда я открываю новый проект, Visual Studio продолжает использовать то, что выбрал последний поставщик управления источником. Кажется, он не забирает его из файла решения. Мне всегда нужно открыть диалог "Инструменты" > "Параметры", чтобы переключаться между поставщиками (который принимает FOREVER!)

Я что-то делаю неправильно? Я ожидаю, что Visual Studio изменит поставщиков на основе открытого решения.

Если это что-то, что Visual Studio просто не делает, есть ли там макрос или расширение, которое будет автоматически определять это?

Я не могу поверить, что этот вопрос не задавался раньше, но я не видел никаких очевидных обманов в списке StackOverflow "Вопросы, которые могут уже иметь ваш ответ". Который, к сожалению, кажется, указывает на ответ "это только я".

4b9b3361

Ответ 1

Связывание поставщика решений, IMO, неверно, поскольку решение может быть резидентным в нескольких системах управления версиями. Хитрость заключается в том, чтобы загрузить надлежащего поставщика управления источником, проверяя зарезервированные каталоги в событии решения перед нагрузкой расширения VS. Код ядра выглядит следующим образом:

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

Полный код для такого расширения здесь. Я могу опубликовать его вскоре после небольшого тестирования, поскольку это очень просто, даже если это потребовало мне много исследований. Я не мог найти ничего похожего, и это странно для меня, поскольку это должен быть позорный способ сделать это. Документация о RegisterSourceControlProvider также была крайне ошибочной, так что это может быть причиной.

Ответ 2

Не совсем ответ, но это было слишком большим, чтобы вставить комментарий:

Я ненавижу говорить, что "работает для меня", но на самом деле это работает для меня. Я использую только AnkhSVN и клиент TFS, но Visual Studio переключается между ними для меня в зависимости от открытого мной решения. Так что вы определенно просите "поддерживать" работу. Возможно, у одного из других поставщиков подключаемых модулей есть проблема?

Открыли ли вы свои файлы решений и подтвердили, что имеется информация об управлении источником? Он должен выглядеть следующим образом:

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

Кроме того, когда вы открываете соответствующее решение, какое указание вы получаете, что он не переключает поставщиков? Появляется ли сообщение об ошибке или ваш проект просто не связан с контролем источника? В частности, мои TFS-окна остаются открытыми и показывают серьезные ошибки при открытии SVN-решения, но контекстное меню в обозревателе решений переключается на правильный провайдер.

Ответ 3

Visual Studio определенно поддерживает это. Предполагается, что поставщик управления исходным кодом будет хранить некоторую информацию в файле решения о том, какой провайдер он использует и какие привязки он использует (при необходимости - VSS и TFS используют это, я думаю).

Когда VS загружает решение, он должен выбрать правильного поставщика.

Из вашего вопроса и из этого вопроса вытекает, что он каким-то образом сломался.

Возможно, вам придется написать макрос для этого. Это не особенно сложно. Вам нужно подключить интерфейс SolutionEvents. Я не уверен, как вы попадете к настроенному провайдеру управления версиями. Начните здесь.

При всем сказанном, однако, он должен работать. Я бы попытался отключить все, кроме двух плагинов, и посмотреть, работает ли он. То, что я получаю, заключается в том, что, возможно, один из поставщиков бросает исключение во время загрузки решения, а VS отказывается от других.