Как MS Visual Studio определяет, что исходный файл изменился? - PullRequest
5 голосов
/ 10 февраля 2012

Использует ли он метку времени изменения и / или проверяет, изменился ли фактический контент (например, путем сравнения контрольной суммы)?

Редактировать: Мне нужно знать это, так как я использую Git для контроля версий и часто меняю ветки. Кажется, что иногда, даже если я изменяю ответвление и силу (например, с развернуть до master и затем обратно на развернуть ), VS восстанавливает половину исходные файлы. Интересно, почему это происходит и почему это происходит иногда, а не происходит в другое время.

Ответы [ 2 ]

5 голосов
/ 10 февраля 2012

Поскольку Visual Studio является проектом с закрытым исходным кодом, держу пари, что только разработчики смогут дать определенный ответ о том, как именно он работает. Однако для моих целей достаточно протестировать некоторые сценарии.

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

2 голосов
/ 10 февраля 2012

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

Некоторые поиски в Google находят больше об этомкласс (или просто посмотрите сами):

Конечно, когда исходный файл открыт, онсодержимое к моменту редактирования, а также любые пользовательские изменения (даже не сохраненные) загружаются в ОЗУ, но оно не сравнивается с содержимым диска (это было бы слишком медленно), оно прослушивает системное событие, когдасистема сообщает, что файл изменился.

Обновление:

Возможно, это не тот класс itslf, а его версия для Win32, вы знаете большую часть системы .NET.классы функциональности - это просто оболочки Win32.

Из этого ответа StackOverflow: Как FileSystemWatcher работает в каталоге другого компьютера?
Я думаю, что это обертывание этого API (не уверен): http://msdn.microsoft.com/en-us/library/aa365465.aspx

Обновление 2:

Это MicrПодход osoft к мониторингу изменений файлов:
http://msdn.microsoft.com/en-us/library/chzww271(v=vs.80).aspx

Обновление 3

Это старый ответ, и выше было упомянуто, что это было предположение,Visual Studio является закрытым исходным кодом, как указано в других ответах.Стоит отметить, что принятый ответ предполагает, что Visual Studio вместо этого ищет даты изменения файла, что предполагает, что он не использует подход, угаданный в этом самом ответе, и что он был неправильным .

Я надеюсь, что читатель не возражает против усилий, направленных на рационализацию возможностей в этом ответе (вызывающих у читателя дискомфорт или отрицательное голосование).Хранение только по архивным причинам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...