如何找出生成的Sandcastle文档中导致差异的原因?

时间:2013-02-16 19:27:05

标签: documentation sandcastle finalize shfb

在Noda Time,我们使用Sandcastle和SHFB生成我们的文档。然后,我们将文档提交回源存储库 - 主要是因为这样可以轻松查看最新(和历史)文档。

我是该项目的主要开发人员,但我使用了两台计算机 - 不幸的是,他们正在构建不同的文档,即使它们都已更新到同一来源。

两台电脑在我能想到的每一个重要方面都是一样的:

  • Sandcastle 2.7.2.0
  • SHFB 1.9.6.0
  • VS 2012专业版(均在“程序”中报告版本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="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">
   Object</a> to attempt to free resources and perform other cleanup operations
   before the <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" 
   target="_blank">Object</a> is reclaimed by garbage collection.</div>

两者都链接到相同的MSDN文档,它看起来像版本1(没有指向Object的链接)。

查看一些已更改的文件,更改是一致的,仅限于此成员。

Sandcastle可以从哪里获取此文档,以及如何让两台计算机的行为方式相同?

编辑:另外一条信息片段 - 清理缓存并在两台机器上重建文档后,SHFB缓存目录中有三个文件:

  • 每台机器上的Reflection.cache大小相同
  • MsdnUrl.cache在两台计算机上具有相同的大小
  • .NETFramework_4.0.0319_E8879A28.cache在Chubby上的大小为13,377,733字节,在Sandy上的大小为13,337,949字节
编辑:重大进展!我发现差异可能来自......

文件c:\Windows\Microsoft.NET\Framework\v2.0.50727\en\mscorlib.xml

  • On Chubby是8,005,263字节,日期为2011年12月12日,并且包含Finalize
  • 的非链接文字
  • On Sandy是9,740,370字节,日期为2009年8月31日,并且Finalize的文字包含链接

在两台计算机上,mscorlib.dll本身大小相同(4,550,656字节),修改日期为2012年9月13日。

但是我怎么能让他们变得一样呢?这种差异来自哪里? (服务包?)

编辑:好的,c:\Windows中的版本是一个红色的鲱鱼 - 这是c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework中的版本应该归咎于的。我将会看看我是否能找出安装之间可能存在差异的原因......

1 个答案:

答案 0 :(得分:10)

考虑到你最近编辑的几个想法,虽然我同意它在黑暗中有点射击......

我会使用像“Beyond Compare”这样的工具来比较两台机器上的.Net Framework文件和XML文件(“文件夹比较”配置文件)。 支持二进制级别的比较,以确保...如果你的两台机器都是本地的,它应该非常快。

您还可以尝试在两台计算机上运行Mark Russinovich的Process Monitor(http://live.sysinternals.com/procmon.exe)并运行文档构建过程。 这样,您将看到正在从帮助文件构建过程中读取和参与哪些文件,以及它们来自哪里... 您将获得大量输出,因为它将显示系统中发生的所有事情;您可能希望禁用注册表和网络监视,仅保留文件监视,还排除与文档构建过程无关的任何进程。

我不是帮助生成专家,但我认为该文本来自XML文件,因此您可能希望过滤器仅显示xml文件。

如果您可以识别所涉及的文件,那么您可能只需要将它们从一台机器复制到另一台机器上。