我想從該應用程序引用的任何代碼動態獲取當前正在執行的Web應用程序的程序集,並在相同的AppDomain中執行。如何在沒有Global.asax的ASP.NET中獲得Web應用程序程序集?
我想這個問題是問什麼:Get web application assembly name, regardless of current executing assembly
然而,在這個問題的所有答覆使用Global.asax
文件,以獲取Web應用程序組件。如果應用程序沒有global.asax文件,則這不起作用,因爲在這種情況下,返回的類型是HttpApplication
,它位於System.Web
程序集中。
我想過的一種方式是通過某種方式過濾當前AppDomain中的程序集,但我不知道這可能是什麼。 Web應用程序和另一個正常的DLL的程序集是否有區別?我知道Visual Studio中的項目有一個GUID來表示項目類型(ASP.NET Web App,類庫,MVC應用程序等)。此信息以某種方式呈現在已編譯的程序集中?
另一種方法是使用System.Web.Hosting
名稱空間中的ApplicationHost
,但該名稱空間只有靜態數據,沒有任何關於程序集的信息。
第三種方法是在Web應用程序項目中包含一個類型並使用該類型,但爲此,需要獲取Web程序集名稱的代碼需要對該類型的引用(並且這將是循環引用)。
任何想法?
這會引發異常,因爲ASPX文件的路徑是相對的,而且它期望虛擬。當我將其更改爲'HttpRuntime.AppDomainAppVirtualPath'時,返回的路徑爲'null' – Slavo
我用'BuildManager.GetCompiledType(「〜/ Default.aspx」)。Assembly替換了您的建議,但它返回一個新程序集。 GetCompiledType()編譯您按需傳遞給它的內容,併爲它創建一個新的臨時程序集,因此它不使用Web應用程序程序集。 – Slavo
@Slavo:嗯......它是什麼樣的應用程序?我試圖弄清楚如何從中得到一個類型。 – SLaks