2013-02-16 56 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

相關問題