Запретить извлечение сторонних DLL в VSS

(Я знаю, что использую Visual Source Safe, у меня нет выбора, потому что он поставляется с лицензией на подписку MSDN, и моя компания не хочет покупать стороннее решение для управления версиями ....)

У меня есть решение VS 2005 с 3 проектами библиотеки классов C #, 2 проектами веб-сайта ASP.NET и одним проектом веб-службы ASP.NET, который хранится в базе данных Visual Source Safe. Некоторые проекты ссылаются на общие библиотеки DLL, которые обрабатывают общие задачи.

Когда новый человек устанавливает решение на своей рабочей станции и строит его впервые, он проверяет общие библиотеки DLL в папке bin веб-сайта ASP.NET и проектов веб-служб. Когда другой разработчик, который в настоящее время работает над проектом, пытается построить, он получает сообщение «файл исключен, извлечен другим пользователем».

VS 2005 не отображает галочку рядом с DLL, которая вызывает головную боль.

Есть ли способ предотвратить это?


person Michael Kniskern    schedule 19.11.2008    source источник
comment
Я знаю, что не в этом суть, но поскольку вы намекали, что вам не нравится VSS, но они не будут платить за другой, почему бы не SVN? Я имею в виду, это неплохо ... в списке вещей по той цене, которая у вас есть (в порядке убывания комфорта) SVN, получить удар по яйцам, VSS.   -  person Bill K    schedule 19.11.2008
comment
Точка взята, Bill K .... У меня было много головных болей с VSS, это нереально. Я постараюсь подтолкнуть SVN, когда у нас будет лишняя монета. Это денежное решение ...   -  person Michael Kniskern    schedule 19.11.2008
comment
SVN является бесплатным, для вас стоит столько же, сколько и VSS.   -  person Bill K    schedule 19.11.2008
comment
Я посмотрю на SVN, когда у меня будет время простоя. Спасибо за предложение.   -  person Michael Kniskern    schedule 19.11.2008


Ответы (3)


Почему вы отметили папку bin в SourceSafe? В проектах, над которыми я работал, сторонние библиотеки DLL были помещены в отдельную папку (возможно, называемую ExternalLibraries или ThirdParty) на том же уровне, что и файл решения. Процесс компиляции будет настроен на копирование dll в папку bin. Это можно сделать с помощью файлов .refresh или на этапе до или после сборки. Таким образом, VisualStudio / SourceSafe не увидит файлы как обновленные и не попытается их проверить.

Если компиляция уже извлекает файлы из-за того, что они являются зависимостями, я бы предложил удалить папку bin из VSS. Это не то же самое, что «Исключить папку из проекта», которая скрывает папку из VS05 при компиляции (и дает вам упомянутую ошибку компиляции).

Если сторонние библиотеки DLL не будут меняться, другой вариант - сделать эти файлы доступными только для чтения в VSS. Таким образом, пользователи не смогут получить файлы. (Чтобы пометить файлы как доступные только для чтения, вам нужно будет изменить разрешения в инструменте управления VSS; инструмент разработчика не имеет такой функции.)

Что касается того, почему это происходит, я не верю, что VSS проверяет двоичные номера версий - это касается только даты изменения файла. Если новый разработчик извлекает весь код, все файлы (включая двоичные файлы) будут иметь текущую дату в качестве даты изменения. Это может быть причиной ненужных проверок.

Что касается ваших более поздних комментариев - я не уверен, почему VS05 не видит файлы как находящиеся под контролем версий, а пользовательский интерфейс VSS видит. Я подозреваю, что это связано с файлами .vss (и подобными), которые находятся в этой папке. В этом случае VS05 неверен.

person Pedro    schedule 19.11.2008

Не уверен, что это проблема или лучшее решение, но если вы обновите каждую машину разработчика, чтобы на них были установлены одни и те же самые последние версии общих библиотек DLL, этого больше не должно происходить. Я думаю, что VSS проверяет библиотеки DLL в папке \ bin, если версия, на которую ссылается файл проекта, не соответствует версии, установленной на машине разработчика.

person MusiGenesis    schedule 19.11.2008
comment
Я только что проверил дату изменения для каждой общей библиотеки DLL в папке \ bin для каждого проекта, и они отличаются от версии, установленной на каждой рабочей станции разработчиков. - person Michael Kniskern; 19.11.2008
comment
Возможно, это не так. Я думаю, что Date Modified просто показывает, когда они были скопированы локально из VSS, так что это всегда будет другим. Эти библиотеки DLL являются вашими собственными проектами или сторонними библиотеками? Это случайно ActiveReports или Log4Net? - person MusiGenesis; 19.11.2008
comment
Это наши собственные библиотеки DLL, но они представляют собой отдельный проект за пределами этого решения, поэтому я предполагаю, что они будут считаться сторонними библиотеками DLL. Нет, это не ActiveReports или Log4Net. - person Michael Kniskern; 19.11.2008
comment
Еще одна вещь, которую нужно сделать, - это строго соблюдать политику, согласно которой все проверяют данные в одном и том же месте на каждой машине. Эта проблема может возникнуть, если разные разработчики имеют разные абсолютные пути к одному и тому же файлу в VSS. - person MusiGenesis; 19.11.2008
comment
Другими словами, если у одного разработчика есть все в c: \ Projects \ OurApplication, а другой разработчик отправляет данные в c: \ Program Files \ Visual Studio 2005 \ Projects \ OurApplication, VSS это не понравится. - person MusiGenesis; 19.11.2008
comment
в настоящее время мы применяем эту политику - person Michael Kniskern; 19.11.2008
comment
Извините, я прекращаю использовать VSS. У нас были такие проблемы постоянно, пока мы не переключились на что-то другое. В VSS может быть способ пометить папку \ bin как что-то, что он должен игнорировать, но это все, что у меня есть, извините. - person MusiGenesis; 19.11.2008
comment
Поверьте, я тоже хочу перестать использовать VSS. Мне придется управлять командой, в каком направлении они хотят двигаться вперед с системой управления версиями. Спасибо за помощь .... Я поставил тебе плюс +1. - person Michael Kniskern; 19.11.2008

@Pedro:

В интерфейсе VS 2005 IDE не указано, что папка \ bin находится в VSS. Когда я смотрю на проект в пользовательском интерфейсе VSS, он показывает, что он выдан пользователю, выполнившему последнюю сборку на своей рабочей станции.

Если я использую опцию «Исключить папку из проекта», это приведет к тому, что компилятор выдаст ошибку «Ссылка не найдена».

В моей структуре решения проект библиотеки классов создает ссылку на сторонние библиотеки DLL с помощью команды «Добавить ссылку». Затем я установил ссылку проекта на библиотеки классов на моем веб-сайте ASP, NET и проектах веб-служб (используя шаблон проекта веб-сайта). Поскольку библиотека классов зависит от сторонних библиотек DLL, они копируются в папку \ bin.

Как сделать файл доступным только для чтения через пользовательский интерфейс VSS?

person Michael Kniskern    schedule 20.11.2008
comment
Я обновил свой исходный пост, добавив дополнительную информацию. Если файлы копируются в папку bin каждый раз правильно, я бы рекомендовал удалить папку bin из VSS. Это должно решить проблему. - person Pedro; 20.11.2008