2011-09-08 45 views
1

我有一個爲多個客戶構建的解決方案,我需要能夠爲每個客戶指定不同的xml文件。我怎樣才能自動做到這一點。我認爲這可能是用不同的配置完成的,但似乎無法弄清楚。如何根據配置自動更改構建哪些文件 - visual studio

有什麼建議嗎?

編輯:

這是用於現在的聲明XML文件中的代碼:

protected readonly static string XML_PATH = @"Resources/xml/Description.xml"; 

,現在是解決的問題是正確的文件之前手動複製到Description.xml方式建造。這當然是容易出錯的,我想將它自動化,優先基於配置。我現在正在尋找一個快速解決方案,因爲我們很遺憾沒有時間重構代碼。

+0

是否構建了xml文件?你究竟是什麼意思? –

+0

不建立xml,它只是包含一些描述。這些說明因客戶而異,我希望能夠根據不同的配置確定使用哪個文件。 – Keller

回答

1

根據您重新的問題:

你可以使用條件編譯如果你想閱讀了關於

protected readonly static string XML_PATH = 
#if DEBUG 
@"Resources/xml/Description.xml"; 
#else 
@"Resources/xml/Description2.xml"; 
#endif 

:(警告:它的混亂,而不是管理配置文件以正確的方式)更好的管理配置文件的技巧,this值得一讀。

+0

感謝您的鏈接,我已經使用生成事件和.bat文件解決了我的問題。 – Keller

1

構建配置相關的配置文件是一個棘手的問題,並有多種方法來解決它。

如果您想要描述您所概述的道路,您需要手動編輯* .csproj文件並添加一個條件項目組以包含正確的xml文件。下面的語法沒有得到遏制,但這樣的事情應該做

<ItemGroup Condition="'${Configuration}' == 'DEBUG'"> 
<Content Include="blablabl.xml"/> 
</ItemGroup> 

我不記得,如果內容是正確的ItemGroup,而只是檢查什麼的ItemGroup您當前.xmls是在和使用。

+0

我不認爲我想搞亂配置文件。我編輯了澄清問題,但我不確定這會不會解決我的問題。也許我在這裏錯過了一些東西。 – Keller

0

現在,我現在自我推銷是皺眉了,但在這種情況下,我希望它沒關係,因爲它聽起來與這個問題有關,我從中獲益不多。

最近我寫了一篇關於如何定位多個環境/機器一對夫婦的博客文章:

Targeting multiple environments and machines - part 1/2

Targeting multiple environments and machines – part 2/2

據我瞭解,在這種情況下,問題是你怎麼了自動構建正確的一組文件,而無需手動確定哪些文件屬於哪個客戶/環境。我在博客文章中提出的解決方案建議使用nAnt以及一些基於頂級的擴展。 nAnt是Ant的.NET版本,一種構建工具,可讓您生成xml文件提供了一組特定的輸入文件,允許您例如生成客戶特定的web.config文件。

在web.config文件中的下列appSetting部分,說你要爲客戶名稱鍵爲每個客戶指定一個不同的值:

<appSettings> 
    <add key="CustomerName" value="${CustomerName}"/> 
</appSettings> 

除了指定的客戶名稱關鍵值,你定義一個名爲CustomerName的屬性。現在,假設我們使用的是惡性,再創建一個客戶的具體文件,內容如下:然後

<?xml version="1.0" encoding="utf-8"?> 
<target xmlns="http://nant.sf.net/release/0.86-beta1/nant.xsd"> 
    <property name="CustomerName" value="Acme Incorporated"/>  
</target> 

楠可以合併這兩個文件,並自動建立客戶/環境的具體文件,爲您服務。

我經歷的解決方案允許您自動構建環境和機器特定的文件,例如網頁。配置文件,但也允許您輸出靜態文件,如許可證文件或庫,全部取決於您定位的環境/機器。我還提供了一個示例Visual Studio 2010解決方案,其中顯示了有關如何執行此操作的非常基本的示例,您可以使用該解決方案download here

你當然可以繼續前進,看看nAnt,但我想我會爲你提供使用我的解決方案的選項。

+0

感謝您的建議,它看起來很有趣,但是這對我來說似乎有點矯枉過正,因爲我正在尋找一個快速解決方案:-)一旦我有足夠的時間,我可能會考慮這一點。 – Keller

+0

在這種情況下,您是否考慮添加預生成事件?右鍵單擊您的項目,選擇「屬性」,然後「生成事件」。如果爲每個客戶添加特定的生成配置,則可以使用$ {ConfigurationName}宏確定要將哪個xml文件複製到解決方案。在預構建事件中查看更多信息:http://msdn.microsoft.com/en-us/library/42x5kfw4.aspx – Tchami

+0

我最終使用了構建事件。謝謝。 – Keller

相關問題