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

Как я могу узнать, что вызывает различия в генерируемых документах Sandcastle?

В Noda Time мы создаем нашу документацию с помощью Sandcastle и SHFB. Затем мы передаем документацию обратно в исходный репозиторий - прежде всего потому, что это упрощает просмотр последних (и исторических) документов.

Я - основной разработчик проекта, но я использую два компьютера - и, к сожалению, на данный момент они строят другую документацию, даже если они оба обновлены до того же источника.

Два компьютера одинаковы по всем важным причинам, о которых я могу думать:

  • Sandcastle 2.7.2.0
  • SHFB 1.9.6.0
  • VS 2012 Professional (обе версии 11.0.50727.1 в разделе "Программы", как "Версия 11.0.51106.01 Обновление 1" на странице "О программе" ).
  • Последняя версия содержимого локальной справки для .NET Framework 4.5 (и не содержит содержимого локальной справки для других версий фреймворка)

Шаги, предпринятые для обеспечения чистой сборки:

  • Удалена папка кэша SHFB (C:\Users\Jon\AppData\Local\EWSoftware\Sandcastle Help File Builder\Cache)
  • Удаленная папка, сгенерированная документацией, в
  • Удален файл настроек пользователя, связанный с файлом проекта SHFB
  • Удаленный кеш символов в Visual Studio

Тем не менее различия остаются. Они, по-видимому, ограничены документацией, унаследованной от самого MSDN, в частности Object.Finalize.

Версия 1 (сгенерирована на машине "Chubby" ):

<div class="summary">Allows an object to try to free resources and perform
other cleanup operations before it is reclaimed by garbage collection.</div>

Версия 2 (сгенерирована на машине "Sandy" ):

<div class="summary">Allows an <a 
   href="#" onclick="location.href='http://msdn2.microsoft.com/en-us/library/e5kfa45b'; return false;" target="_blank">
   Object</a> to attempt to free resources and perform other cleanup operations
   before the <a href="#" onclick="location.href='http://msdn2.microsoft.com/en-us/library/e5kfa45b'; return false;" 
   target="_blank">Object</a> is reclaimed by garbage collection.</div>

Оба ссылаются на одну и ту же документацию MSDN, которая выглядит как версия 1 (нет ссылок на Object).

Если посмотреть на несколько измененных файлов, изменение согласовано и ограничено этим элементом.

Где Sandcastle может получить эту документацию, и как я могу заставить оба компьютера вести себя одинаково?

EDIT: еще один фрагмент информации - после очистки кеша и восстановления документов на обеих машинах в каталоге SHFB Cache есть три файла:

  • Reflection.cache имеет одинаковый размер на обеих машинах
  • MsdnUrl.cache имеет одинаковый размер на обеих машинах
  • .NETFramework_4.0.0319_E8879A28.cache имеет размер 13 377 733 байт на Chubby и 13 337 949 байт на Sandy

EDIT: Значительный прогресс! Я нашел, где разница, вероятно, исходит от...

Файл c:\Windows\Microsoft.NET\Framework\v2.0.50727\en\mscorlib.xml:

  • В Chubby есть 8 005 263 байт с датой 12 декабря 2011 года и имеет не связанный текст для Finalize
  • On Sandy - 9 740 370 байт с датой 31 августа 2009 года и имеет текст для Finalize, который включает ссылки

На обеих машинах сам mscorlib.dll имеет тот же размер (4,550,656 байт) и имеет модифицированную дату 13 сентября 2012 года.

Но как я могу заставить их быть одинаковыми? Откуда эта разница? (Пакеты услуг?)

EDIT: Хорошо, версия в c:\Windows была красной селедкой - это виновата версия в c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework. Я собираюсь посмотреть, могу ли я узнать, почему это может быть различно между установками...

4b9b3361

Ответ 1

Несколько идей, рассматривающих ваши последние изменения, хотя я согласен, что это немного стреляет в темноте...

Я бы использовал такой инструмент, как "Beyond Compare", чтобы сравнить файлы .Net Framework и XML файлы на обоих компьютерах (профиль "сопоставление папки" ). Желательно, чтобы сравнение двоичного уровня было абсолютно уверенным... если обе ваши машины являются локальными, это должно быть очень быстро.

Вы также можете попробовать запустить Монитор процессов Mark Russinovich (http://live.sysinternals.com/procmon.exe) на обеих машинах и запустить процесс создания документации. Таким образом, вы увидите, какие файлы читаются и участвуют в процессе создания файла справки, и откуда они идут... Вы получите много результатов, так как он покажет все, что происходит в вашей системе; вы можете отключить мониторинг реестра и сети, чтобы оставить мониторинг файлов, а также исключить любой процесс, не связанный с процессом создания документации.

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

Если вы можете идентифицировать задействованные файлы, вам просто нужно будет скопировать их с одной машины на другую.