如何找出导致Sandcastle文档生成差异的原因?
在野田时间,我们使用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
这是怪罪的版本。我要看看我能不能找出原因,可能是设备之间的不同...
一对夫妇的考虑你最近编辑的想法,虽然我同意这是一个在黑暗中拍摄一点...
我会使用“Beyond Compare”这样的工具来比较两台机器上的.Net Framework文件和XML文件(“文件夹比较”配置文件)。 赞成二进制级别的比较是完全确定的......如果你的两台机器都是本地的,它应该是非常快的。
您也可以尝试在两台机器上运行马克Russinovich的进程监视器(http://live.sysinternals.com/procmon.exe)并运行文件建设进程。 通过这种方式,您将看到哪些文件正在读取并参与帮助文件构建过程,以及它们来自哪里...... 您将获得大量输出,因为它会显示系统中发生的所有事情;您可能希望禁用注册表和网络监视,只保留文件监视,并排除与文档构建过程无关的任何过程。
我不是帮助一代专家,但我认为该文本来自于XML文件,所以你可以把它放到一个过滤器上只显示以及XML文件中。
如果你能确定所涉及的文件,那么你可能只需要他们从一台机器转移到另一副本。
我发现现在涉及到的文件 - 它绝对是引用程序集。我通过删除继承的文档得到了一个临时修复,但我也想知道为什么存在这些差异。 – 2013-02-21 12:03:59
你有不同的程序集的版本号吗?如果您使用Google站点查找版本号:support.microsoft.com是否找到任何提及它们的知识库?一种可能性可能是从Windows更新周期发布的修补程序,它以某种方式落在您的某台计算机上(例如,另一个应用程序已经安装了此修补程序作为先决条件)? – 2013-02-21 12:19:42
对不起,不 - 引用程序集目录中的XML文件。我有一些微软正在研究可能发生的事情(为什么有两个不同的版本)。 – 2013-02-21 12:21:03
你肯定确定在SC可执行文件的路径中没有另一个版本?嗯,有没有可用于Windows的Unix“which”命令? – larsw 2013-02-16 19:33:31
@larsw:这里只有一个SandcastleHelpFileBuilder.targets每台机器:( – 2013-02-16 19:39:03
可能的差别是对文件,因为这是安装一台机器上的任何Windows系统/.NET升级/补丁,但不是在其他你安装所有的礼物吗?两台机器上的.NET框架版本以相同的方式? – stakx 2013-02-16 20:57:53