我所有的代碼都在源代碼控制之下,所以我100%確定源代碼沒有改變。但是如果我構建一個C#DLL兩次他們的內容稍有不同。我可以通過建造,然後再次建造100%的時間來重現問題。從同一源代碼生成的兩個DLL文件有什麼區別
這似乎沒有影響程序,但是用於從兩個MSI文件創建修補程序的工具(如MSIMSP)被這些細微的更改拋出。製作補丁(對於我的產品)比應該大40倍。
我已經反編譯了這兩個DLL及其程序集信息,類等等,都完全一樣。這些文件的大小也完全相同,但創建時間不同。所以我真的無法摸清已經發生了什麼變化。
所以我挖得更深一點。
我已經使用WinDiff查找更改,然後在十六進制編輯器中交叉引用這些更改。 WinDiff在第二個「行」中顯示了一個變化,並在文件的大約80%處排成一行。
在十六進制編輯器中,我看到更改的第一個字節是字節0x088(字節136)。這似乎是這條'線'上唯一改變的字節。我很難找到第二個改變,因爲WinDiff沒有告訴我改變的確切字節偏移量。
是否有人熟悉(C#)DLL文件的構成知道更改的字節可能意味着什麼?或者更好,但如何確保DLL文件在重建時保持完全相同?
有時在我的bin/release文件夾中有一個名爲$ RANDOM_SEED $的文件,並且每次重建時都會更改該文件的內容。我沒有詳細說明,但我可以想象這是兩個變化之一。有人需要做一些研究。 **編輯:**(它的nunit,可能對dll沒有影響,所以忘記我的評論)http://stackoverflow.com/a/40382757/5962841 – Mafii
這可能是值得你嘗試一個好的文本/十六進制編輯器如Vedit。自1989年以來,我一直在使用它。即使在這些IDE和intellisense時代,它也是一個很好的工具。 www.vedit.com –
[如何判斷兩個Net DLL是否相同](http://stackoverflow.com/questions/2735643/how-can-i-tell-whether-two-net-dlls-are-同樣)似乎從另一個角度來看同一個問題。 –