2012-11-23 25 views
6

是否可以在web.config或app.config中創建強類型引用,以便在未將這些類型引用添加到項目時構建將會中斷?是否可以創建強類型的web.config引用?

例如,假設我有一個WhizzBangerFactory,它在web.config中爲已聲明的WhizzBangers查找。我可能有配置類似,

<whizBangs> 
<add name="SuperDooper" type="MyProject.WhizzBangers.SuperDooperWhizzBanger, MyProject.WhizzBangers" /> 
<add name="Fantastical" type="AnotherProject.WhizzBangers.FantasticalWhizzBanger, AnotherProject.WhizzBangers" /> 
</whizBangs> 

這將編譯即使是MyProject.WhizzBangers andAnotherProject.WhizzBangers沒有引用完美的罰款。我想要的是構建失敗,並告訴我,我已經錯過了參考。

+0

我不知道這是否可以用的工具,如ReSharper的實現? – Mike

+0

創建一個可執行文件,通過解析.config文件或其他方式來檢查您需要的內容。從Pre-build事件調用此可執行文件。 –

回答

1

Resharper可以幫助你。

它在視覺上在該類型沒有引用一個web.config區分事物(或你已經犯了一個錯誤 - 在這個例子中,我取了個「T」關閉「微軟」的結尾)

enter image description here

但是,它仍然沒有失敗的編譯,這是一個恥辱。這應該!

+0

但是,這點更清晰街不能用失敗我自動構建 –

3

web.config是僅限運行時的解決方案。要遲到建立成功或失敗。

如果相同的構建構建web.config中引用的類型,請解析web.config文件以驗證是否存在所有文件(這將要求網站的所有必需二進制文件以共同的目錄。對於類似tfs的情況,這將作爲後編譯步驟完成,只有在成功時纔會將二進制文件複製到drop目錄,否則構建失敗

如果其他類型由另一個構建提供並作爲安裝程序的相同類型的配置文件解析可作爲獨立的應用程序(安裝的一部分)作爲完整性檢查運行

另一種方式(將包括另一種在您的構建中引用所有可能需要的類型的項目,創建一個類型的實例,以便編譯器不會優化),並將此項目添加爲Web項目的依賴項。如果該類型項目失敗這樣,那麼網絡構建項目失敗以及

+0

謝謝,這是有道理的 - 因爲貝尼特斯暗示也許一個更好的主意是隻不使用web.config文件來解決問題,並尋求其他解決方案,比如國際奧委會。 –

2

兩點:

Firsly,請問你的項目編譯即使引用丟失?這意味着你並不需要它們!你怎麼能有一個你不需要的強類型引用?當您錯過了不必要的參考時,您會要求提醒您注意嗎?

其次,

我還沒有你想要做什麼不清楚,但我想你想可以通過創建一個預生成步驟中取得的成就。您可能需要編寫一個小小的C#控制檯程序來處理和檢查web.config文件。

它與Visual Studio生成類以表示資源或屬性(如果使用工具添加它們)的方式類似。例如,如果您轉到Project - > Properties,Resources選項卡,然後創建一個資源,您會發現Visual Studio會吐出一個Resources.Designer。有一類,然後可以參考在你的代碼

Properties.Resources.MyTestResource 

有趣的是,生成的代碼裏面CS文件是此評論

/// <summary> 
/// A strongly-typed resource class, for looking up localized strings, etc. 
/// </summary> 
// This class was auto-generated by the StronglyTypedResourceBuilder 
// class via a tool like ResGen or Visual Studio. 
// To add or remove a member, edit your .ResX file then rerun ResGen 
// with the /str option, or rebuild your VS project. 

這聽起來像你也許可以做類似的事情在你的項目中,可能通過添加一個預生成步驟來爲你生成類。

的StronglyTypedResourceBuilder類在這裏有一個參考頁:

http://msdn.microsoft.com/en-us/library/system.resources.tools.stronglytypedresourcebuilder.aspx

看起來相當容易使用。這可能不適用於您的情況,但我只是將其用作示例。像你想生成一個代理類型或某事聽起來更多...

1

我會建議你作爲替代使用某種類型的IoC系統。微軟已經提供了Unity Framework,它會比你嘗試的這個解決方案更好地工作。 Ninject也相當不錯。

http://www.ninject.org/

+0

我認爲這可能是最好的想法,我猜如果不能從web.config中爲缺少的類型獲取編譯時錯誤,那麼不同的解決方案會有意義。 –

0

基於什麼菲利普·丹尼爾斯說,你可能需要一個生成後步驟。

讓項目編譯,以便它可以將所有引用的DLL放在其輸出文件夾中,然後有一個工具(可能是自定義編寫的,或者如果Github或Codeplex上有東西)掃描.config文件,看看指定的類型可以在輸出文件夾中找到。

如果無法找到,則工具返回非零返回代碼,以指示構建過程(只需確保它掛鉤到構建過程中,你就必須讓MS-項目生成事件手動捕獲錯誤代碼,我認爲)它失敗並顯示相應的錯誤消息。

0

你能嘗試寫這將使用此配置和測試結合起來,作爲構建的一部分的單元測試?這會給出正確的指標,即使在自動構建系統中,某些測試仍然失敗,並幫助您解決問題。

或者你可以嘗試放置whizBangs配置在一個單獨的配置文件,並提及在web.config中的源。當這個獨立的配置文件被保存,你可以調用(在VS已有的自定義工具設備),這將自動生成一個文件CS形成配置文件的類表示一個customtool。可以使用自定義工具生成的適當註釋來檢查此cs文件,以指示其用途。每當開發人員更改此文件並進行保存時,config和cs文件都將被檢出並編輯。

相關問題