2010-11-29 118 views
0

應用程序是一個C#.Net 3.5 WCF服務。將自定義版本信息添加到C#應用程序

我想在構建過程中動態地將一些構建信息添加到最終的二進制文件和程序集中,然後可以通過編程方式讀取它們,並在向Web服務發送GetVersionInfo請求時將其發送回WCF客戶端。

.Net程序集版本化是不夠的。我想包含額外的字符串數據,其中包含應用程序構建時的系統狀態。

我在想,我會通過添加一個後期構建事件來調用腳本來更新app.config文件與我想要的數據。這聽起來是否正確,還是應該考慮採用其他方法?

更新

我還這樣的字符串出現在最終的exe文件的「特殊內部版本說明」屬性。即我想右鍵單擊該文件並在文件的版本選項卡中查看此信息。

在此先感謝。

+0

我,我想要內部編號,這將是「1.0。*」中的*,每次構建時自動遞增1。我曾經在VS的一些早期版本中使用過,但不知道現在是否可以在VS 2010中設置它。任何人? – BaBu 2010-11-29 17:00:45

回答

2

我懷疑預先構建事件可能比後期構建更合適......您是否考慮添加一個buildinfo.xml文件(或類似文件)作爲嵌入式資源構建到程序集中?你可以用Assembly.GetManifestResourceStream加載它。這樣你就不必擔心適應現有的文件或類似的東西 - 只需在預生成步驟中用新文件覆蓋buildinfo.xml即可。

+0

嗨,謝謝你的回答。你對更新有任何想法,即如何填充最終二進制文件的特殊構建描述屬性? – ng5000 2010-11-30 10:08:02

1

您必須決定將要交換的信息與可執行文件本身綁定的重要性。

在構建過程中更新配置文件是一個可行的模型,但它將信息放置在可由具有訪問權限和文本編輯器的任何人更改的位置。

在編譯後的程序集中編譯後更新信息當然是可以的,但是如果您決定簽署程序集,它會很脆弱並且崩潰。這也是很多工作,因爲沒有內建支持以這種方式重寫彙編文件。

另一種您應該考慮的方法是創建您自己的自定義程序集級元數據屬性並在構建過程中分配它們。作爲構建的一部分,您甚至可以將它們放置在單獨的代碼文件中(或將它們追加到AssemblyInfo.cs中)。

您也可以考慮創建一個嵌入式資源(例如XML文件),並在運行時從程序集清單中檢索它。

上述任何一種方法都需要您使用預構建自定義步驟而不是後構建步驟。

就個人而言,如果沒有大量數據,我發現元數據屬性是一種方便的方法。否則,我會考慮使用嵌入式資源文件。

相關問題