簡體   English   中英

可重復在不同的機器上使用相同的C#源代碼構建

[英]Repeatable builds from same C# source code on different machines

我正在嘗試生成一個足夠聰明的工具,以編程方式檢查由在不同時間在兩個單獨的機器上編譯的相同C#代碼生成的發行版本二進制文件,並得出結論,代碼是相同的,同時能夠獲取任何代碼更改(如果存在於用於生成這些二進制文件的c#代碼。

我嘗試過使用多種方法,但為了保持這種簡短,我只會堅持最新的嘗試。 我在二進制文件上使用/ text選項運行ildasm並在文本中替換匿名字段等的GUID,但是當二進制文件來自不同的pc時,我發現ILDASM / text選項生成的文本被重新排序。 源自相同代碼但在不同機器上通過相同設置編譯的二進制文件也出現嚴重重新排序。 任何建議如何能夠控制IL的這種重新排序將是非常感激的?

干杯

PS:任何可靠地實現這一目標的替代策略也是最受歡迎的。

等待Eric Lippert醒來:) - 來自@mikez評論的社區維基:

當編譯器團隊的主要開發人員(Eric Lippert)發言時,您應該傾聽: http//ericlippert.com/2012/05/31/past-performance-is-no-guarantee-of-future-results/包含詳細信息不做的解釋和強烈建議(可能是為了回答這個確切的問題):

編譯相同的C#程序兩次保證產生相同的二進制輸出?

沒有。

我找到了一個解決方案,根據Eric Lippert在帖子中提到的客戶最終解決的問題,可以通過將編譯過程的處理器親和性設置為01來實現。之后生成的可執行文件/ dll幾乎完全相同。使用了som mvid和guids。 使用文本模式在這些二進制文件上運行ILDASM並構建一個簡單的散列工具來去除這些隨機的東西提供了這樣的解決方案。 我只是為了完成而提供這個,並幫助那些可能面臨這個問題的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM