0

假設我有「建立服務器」和「dev的機器」,這兩個具有以下特徵假設我有相同的源代碼,我是否必須重建代碼?

  • C#編譯器
  • 相同源代碼
  • 相同系統環境變量
  • 相同編譯&編譯器標誌
  • 構建服務器和開發機器上的相同體系結構

我也瞭解有關從Eric Lippert's blog C#編譯器下面的(我使用.NET,但這個問題可以問任何靜態語言構建過程中)

  • 設計的C#編譯器永遠不會產生相同的二進制兩次
  • 在基本層面上,C#編譯器爲您做的工作是需要C#代碼,分析它的正確性,並生成一個用PE格式編寫的等效程序
  • 編譯器優化和多線程編譯器不是-determinstic
  • JIT將cha在運行時

知道這一切NGE的代碼。

如果我建立在生成服務器上的源,並得到一組DLL的和我所說的server binaries

難道不是多餘的重建我的開發機器上的二進制可執行文件,即建立local binaries

AREN server binarieslocal binaries有效替代對方。

如果是這樣,我可以只複製所有的server binaries ...但他們local binaries已經去了,並把它們當作我自己建造它們的想法。

很明顯,在1個開發機器的情況下,這似乎是不必要的,但如果我有開發機器,我只需要構建一次,而不是n次。

是否有明顯的平局背對着我的邏輯是什麼? .Net商店的這種常見做法是什麼?

回答

0

是原則上它是多餘的重建他們對你的機器。但是你的問題不夠具體,有多種可能的情況會產生不同的答案。

舉例來說,如果你有不經常改變的,並保存在一個單獨的解決方案基本工具庫,這些都是具有服務器建立他們,然後被用作這種明顯的候選人。但請記住,簡單地複製二進制文件可能會很繁瑣且容易出錯。每次更改代碼時都必須執行此操作。你必須爲它編寫一個腳本。如果需要調試功能,您還必須複製pdb文件,並在開發機器上具有相同的源代碼。在這種情況下,讓NuGet爲你管理這件事可能會很方便。另一種情況是這樣的:如果整個項目非常大但是足夠模塊化,那麼單個開發人員或他們的團隊可以在不需要其餘部分的全部源的情況下在項目的單獨部分上工作。如果他們不必費心構建他們不需要處理的那些項目部分,他們就會獲得時間,但是可以從服務器上提取工作版本。

另一個典型的情況是您有一個解決方案,其中包含一組邏輯上屬於一組的項目。像主要的UI項目,具有應用邏輯的基礎項目,插件項目等等。原則上,服務器可以爲你構建其中的一些,這是完全沒有意義的,並且是完全不切實際的(並且注意到這裏的一些缺點也可能適用於上述情況,因爲有時在簡單的實用程序庫和許多項目嚴重依賴的某些事物之間沒有明確的界限):在修改源代碼之後,您需要將更改推送到服務器,然後等待它建立,然後複製結果。這是浪費時間。特別是因爲您的服務器可能需要很長時間才能生成構建結果,因爲它會在所有可能的配置中構建/測試所有內容。此外,默認情況下,VS會覆蓋剛剛複製的二進制文件,因此您必須卸載該項目,或者找出其他方式使其不能執行此操作。

相關問題