我已經在c#中創建了一個自定義程序集,這個程序集將被許多不同的現有系統所使用,在獲得這個程序集與我們的系統一起工作中有相當多的配置,更容易,我們決定創建一個本地NuGet服務器並將該程序集轉換爲NuGet包。創建一個條件NuGet包
這工作得非常好,我們能夠添加程序集所需的所有依賴項,並添加一個web.config.transform文件以在需要的任何附加節點中進行合併。
這是我們打我們的第一個攔路虎......
首先,我前面提到的組件C#編寫的,我們是申請試運行是寫在VB.Net。因爲我們在組件中使用log4net
,所以我們實現了WebActivatorEx
以確保在應用程序啓動時初始化這個功能,這意味着我們有一個AppStart
類,它位於App_Start
文件夾中。然而,指的是WebActivatorEx
文件後,我們注意到,如果該項目是一個網站作爲並列的Web應用程序的AppStart
類必須坐在App_Code
文件夾不是App_Start
文件夾內,也必須使用PostApplicationStartMethod
,而不是PreApplicationStartMethod
。
同樣作爲AppStart
類是用c#編寫的,並且會放在VB.Net項目中,我們只有在目標項目是VB時才需要將其轉換爲VB,以避免混淆更多配置文件,這是我們嘗試的最小化。
總之,這裏的主要問題是:
1)我們的NuGet包能有某種條件行爲,即如果一個VB.Net項目添加VB中的AppStart
類。淨,如果它的C#,把它留作C#。
2)如果該項目是一個網站,地方本級AppStart
在App_Code
文件夾,並使用PostApplicationStartMethod
,如果該項目是一個Web應用程序發生在App_Start
文件夾中的AppStart
類,並使用PreApplicationStartMethod
。
3)這是即使在初始化log4net的,而無需重新編寫的目標應用程序的Global.asax中
4)我知道你可以運行NuGet包內的PowerShell命令方面正確的做法,是無論如何用這個來確定項目是否是C#|| VB還是我複雜的東西,我應該爲每個場景簡單地創建4個不同的NuGet包,但這似乎是錯誤的。
我會等待並歡迎任何建議或意見。
我認爲OP指的是你不能在網站中使用'PreApplicationStartMethod'這個事實,因爲當這個方法是由於'App_Code'文件夾引發的時候,它甚至沒有編譯過。 'https:// github.com/davidebbo/WebActivator'然而,OP需要考慮的是,這很早就需要初始化'log4net'。 –
具體而言,我的意思是編譯程序集並不重要。這是一個很好的觀點@generalexception –
啊公平點,所以因爲程序集已經編譯,那麼PreApplicationStartMethod仍然可以正常工作? –