2008-09-06 35 views
20

我只是想知道是否人們認爲值得學習使用MSBuild語法來定製.net項目的構建過程,或者是否真的不值得,因爲使用visual可以輕鬆構建項目工作室。值得學習使用MSBuild嗎?

我在夜間構建等方面思考,但是我不能使用預定事件,它使用內置到VS中的命令行構建選項?那裏有優越的工具嗎?

回答

14

@kronoz
我會說是。
有關MSBuild的整潔事情是,如果您修改您的csproj文件以包含自定義生成步驟,那麼這些步驟將發生在VS或MSBuild內。此外,如果您有構建服務器,則無需安裝完整的VS,只需安裝SDK即可構建您的項目。

2

的MSBuild是難以置信的簡單易用,你可以使用VS來管理項目和解決方案文件,只是通過SLN到的MSBuild。

6

這聽起來像你是一個開發人員在你自己的網站上工作。如果是這種情況,那根本就沒有必要,但作爲您專業經驗的一部分,您仍然是一個好主意。

隨着項目開發人員數量的增加,項目的自動化建設變得更加必要。對於兩個開發人員來說,編寫不兼容的代碼非常容易,它會在合併時破壞(假設我調用函數foo(int x),並將簽名更改爲foo(int x,int y):當我們結合我們的代碼庫,代碼將會中斷

這些類型的錯誤增加了複雜性,並且與集成構建之間的時間差異增加了麻煩通過設置夜間構建甚至每次簽入時發生的構建,這種做法在多個開發商的項目中是非常符合行業標準的

所以現在,回答你的問題:這是一項跨越項目和公司的技能,你應該學會它以擴大你的知識面,作爲開發人員的技能,並在y上添加重要的一行我們的簡歷。

0

從命令行構建MSBuild相對容易學習。首先打開Visual Studio命令提示符並運行msbuild /?。只需閱讀一次幫助,然後再決定是否想了解更多詳細信息。

寫項目文件有點複雜。大多數人不需要學習它,因爲你可以在Visual Studio中完成大部分任務。但是,它對於某些問題也很有用。

我曾經使用MSBuild作爲腳本語言,並結合大量的自定義任務。 MSBuild具有奇妙的日誌記錄支持+內置依賴管理。但是,這不是一門容易學習的語言。 PowerShell是一個更好的選擇。

12

MSBuild絕對值得學習。在初始學習曲線(實際上可能非常陡峭)之後,執行最常見的構建自動化步驟變得相當容易。在釋放模式

  • 建築組件
  • 簽署組件具有很強的名稱
  • 運行單元測試
  • 在飛行
  • 修改組件的版本號修改XML文件/ Web.config中-S
  • 驗證FxCop/StyleCop等...
  • 自動化部署 - 創建SQL數據庫,IIS網站,Windows服務等...
2

在像你這樣的情況下,你還沒有構建系統,那麼是的,MSBuild是絕對值得的。您不僅可以將其用於各種預構建和後構建任務(請參閱Jicko Petiov的答案),還可以將其很好地集成到持續集成環境(如CruiseControl)中。

一個可能不值得的場景是當你已經有一個自動的/腳本化的構建系統時。例如,我自己並沒有花時間使用MSBuild,因爲在MSBuild存在之前,我一直在使用NAnt來完成此任務...

6

對於編寫.NET軟件的任何人和每個人來說,MSBuild絕對值得學習。爲.NET應用程序構建服務器不再需要安裝Visual Studio(如Andrew Burns所述)的原因是MSBuild現在是.NET Framework的一部分。

瞭解MSBuild將爲您選擇使用什麼技術實現持續集成提供了極大的靈活性。因爲我花時間學習MSBuild,所以我能夠改變CI系統,我們的一個團隊正在使用從CruiseControl.NET到TeamCity,沒有什麼困難。那些CI服務器,或類似FinalBuilder(我不熟悉),是比預定任務執行夜間構建更好的選擇。學習如何實現自定義的MSBuild任務將爲您實現自定義構建提供更大的靈活性。 Jivko Petiov列舉了MSBuild變得更容易的一些任務。在數據庫部署和配置的情況下,我編寫了在MSBuild中執行此操作的腳本,它使開發和測試過程變得更加簡單。

如果您將來使用Visual Studio Team System,則使用MSBuild構建的應用程序比通過其他方式構建的應用程序更容易進入該環境。

有很多可用的資源可以幫助您開始使用MSBuild。我會從Inside the Microsoft Build Engine開始。其中一位合着者在網絡上也有很多東西,包括this siteproject on CodePlex

0

@kronoz我會說是的。整潔的 有關MSBuild的事情是,如果您將 修改您的csproj文件以包含 自定義構建步驟,那麼這些步驟 將發生在VS或從 MSBuild。另外,如果你有一個構建 服務器,你將不需要安裝 完整的VS,只有SDK來建立你的 項目。

==>這不完全正確。例如,在構建服務器上構建安裝項目需要安裝Visual Studio!

0

如果你在英國發展。淨車間,它值得學習。
我已將我們的構建流程與Jenkins(最初爲Hudson)集成。 如上所述,MSbuild具有陡峭的學習曲線。然而,一旦你掌握了基礎知識,就可以開始自定義構建。 我的印象至今 - 可能是天真的,大部分的腳本是由的

<PropertyGroup> 
    <PropertyKey>value</PropertyKey> 
</PropertyGroup> 
<ItemGroup> 
    <ItemListKey>List values<ItemListKey> 
</ItemGroup> 
<Task Source="" Target="" /> 
 
    Besides using for build, I successfully used MSBuild to create a module that manages 
    configuration files such as web.config and foo.exe.config files. 
    it is a hybrid module that consists of .net console app, MSBuild script and batch file. 
    what this module does is that during a project upgrade, it will create a XML transform  
    template with connection strings, endpoints and appSettings from old configuration 
    files. 
    after the project has been upgraded, the module will transform newly deployed 
    configuration 
    files without affecting any new entries. if you have dozens of configuration files this 
    is very effective.