2013-02-16 55 views
46

在野田时间,我们使用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项目文件的用户设置文件SHFB缓存文件夹(C:\Users\Jon\AppData\Local\EWSoftware\Sandcastle Help File Builder\Cache
  • 删除Visual Studio中的符号缓存

仍然分歧依然存在。它们似乎仅限于从MSDN本身继承的文档,特别是Object.Finalize

版本1(机 “丘比” 上生成的):

<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版(机 “桑迪” 上生成的):

<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。缓存在Chubby上的大小为13,377,733字节,在Sandy上为13,337,949字节

编辑:显着的进展!我发现其中的差异可能是来自哪里...

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

  • 在小胖是8005263个字节,2011年12月12日的日期,并具有Finalize非链接的文本
  • 在桑迪是9740370个字节,2009年8月31日的日期,并具有Finalize文本,其中包括链接

在两台机器上,mscorlib.dll本身是相同的尺寸(4,550 ,656个字节),并有9月13日2012年

但我怎么可以让他们相同的修改日期?这种差异从哪里来? (Service packs?)

编辑:好的,在c:\Windows版本是一个红色的鲱鱼 - 它是在c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework这是怪罪的版本。我要看看我能不能找出原因,可能是设备之间的不同...

+1

你肯定确定在SC可执行文件的路径中没有另一个版本?嗯,有没有可用于Windows的Unix“which”命令? – larsw 2013-02-16 19:33:31

+2

@larsw:这里只有一个SandcastleHelpFileBuilder.targets每台机器:( – 2013-02-16 19:39:03

+1

可能的差别是对文件,因为这是安装一台机器上的任何Windows系统/.NET升级/补丁,但不是在其他你安装所有的礼物吗?两台机器上的.NET框架版本以相同的方式? – stakx 2013-02-16 20:57:53

回答

10

一对夫妇的考虑你最近编辑的想法,虽然我同意这是一个在黑暗中拍摄一点...

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

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

我不是帮助一代专家,但我认为该文本来自于XML文件,所以你可以把它放到一个过滤器上只显示以及XML文件中。

如果你能确定所涉及的文件,那么你可能只需要他们从一台机器转移到另一副本。

+0

我发现现在涉及到的文件 - 它绝对是引用程序集。我通过删除继承的文档得到了一个临时修复,但我也想知道为什么存在这些差异。 – 2013-02-21 12:03:59

+0

你有不同的程序集的版本号吗?如果您使用Google站点查找版本号:support.microsoft.com是否找到任何提及它们的知识库?一种可能性可能是从Windows更新周期发布的修补程序,它以某种方式落在您的某台计算机上(例如,另一个应用程序已经安装了此修补程序作为先决条件)? – 2013-02-21 12:19:42

+0

对不起,不 - 引用程序集目录中的XML文件。我有一些微软正在研究可能发生的事情(为什么有两个不同的版本)。 – 2013-02-21 12:21:03

相关问题