4

我們有一個試驗和生產兩個代碼庫。這兩個代碼庫之間的唯一區別是在兩個文件中:使用持續集成修改.NET項目文件

  • 配置文件
  • 構建文件(.csproj的)

維護兩個分支是一個相當大的努力可能被淘汰將代碼庫合併爲一個並使用連續集成(例如Hudson)來根據目標環境修改文件。

由於VS2010的,沒有爲配置文件一個非常聰明的解決方案,使我們能夠定義不同的配置文件轉換爲兩個創建配置「釋放試驗」和「釋放-PROD」。

但是,我們有一定的差異,這反映在項目文件(.csproj)如:

  • 所得組件的名稱:foo.exe的與美孚,將Test.exe。
  • 的程序集的版本。
  • ClickOnce部署設置。

有沒有什麼聰明的方式可以根據構建配置如何轉換csproj文件,或者如何將這些設置提取到配置文件或C#代碼中?

更新:

我在的csproj文件的MSBuild條件的屬性試圖通過@JaredPar的建議,但它有一個警告夫婦(見我的意見的詳細信息)。還有其他方法可以實現嗎?

+0

不應該完全通過項目文件來控制這些更改嗎?我相信你可以根據選定的構建配置不同地應用設置。 – mellamokb 2012-03-27 14:30:14

回答

2

這聽起來像你想使用一個csproj和控制元素,如基於特定構建配置的組件名稱。如果是這樣,那麼你正在尋找MSBuild屬性上的Conditional元素

<AssemblyName Condition="'$(Configuration)' == 'Release-Prod'">Foo</AssemblyName> 
<AssemblyName Condition="'$(Configuration)' == 'Release-Test'">Foo-Test</AssemblyName> 
+0

你是對的!我之前使用過這種情況,但並不熟悉它。我會嘗試這個a.s.a.p. – chiccodoro 2012-03-29 08:55:26

+0

這已經很長時間了......回到這個項目後,我徹底嘗試了這個方法,同時還用條件定義了clickonce設置。我注意到它可以很好地適用於以下工作流程:啓動VS,打開解決方案,選擇生成配置,點擊「發佈」。但是,如果出版後,我改變了構建配置和命中再次發佈,VS字面上覆蓋新選擇的配置與它從發佈之前緩存的那些設置 - 這樣修改的csproj文件。 :-( – chiccodoro 2013-02-13 13:41:46

+0

還有一點需要注意的是:當我嘗試運行(調試)應用程序時,VS似乎從它找到的第一個元素中取出程序集名稱,而忽略了配置。對於程序集名稱不同的任何配置第一個發現,VS無法運行應用程序,因爲它沒有找到它所期望的名稱下的文件。 – chiccodoro 2013-02-13 15:07:53