2013-05-03 72 views
4

我需要知道我的程序集託管的上下文(ASP.NET,Windows服務,Windows應用程序等)。我怎樣才能確定我的dll託管在哪裏

我的程序集應該根據上下文調用不同的函數。例如,如果需要創建相對於其位置的文件夾,我想知道使用哪種方法:Path.GetFullPath(dirName)Server.MapPath(dirName)

+1

@CodeCaster - 我覺得OP可能會問,如果路徑是所有上下文(ASP.NET,Windows服務,Windows應用程序等)是相同的。例如,如果ASP.NET返回一個URL,那麼它可能需要被映射。 – JDB 2013-05-03 18:37:55

+0

@Ramhound:系統變量如什麼? – 2013-05-03 18:47:29

回答

5

這聽起來像你正在開發一個供其他開發人員使用的DLL。這聽起來好像您試圖在您不知道和/或無法控制環境的情況下創建臨時文件。

如果以上情況屬實,最好創建一個配置文件(位於與DLL相同的目錄中),其中包含用於臨時文件的路徑。 (或者甚至更好,利用AppSettings在您的App.Config中或Web.Config中類似Log4Net

缺席這個配置文件,你可以嘗試使用GetTempPath(),但這將其他可能的fail for ASP.NET(和may fail下情況)。

如果你沒有創建臨時文件,你可以嘗試(使用MemoryStream,例如)來存儲在內存中需要的信息。

如果失敗了,那麼你總是可以告訴用戶使用配置文件。


在回答您的實際問題,我不知道的方式來肯定地說,你正在使用什麼樣的項目。 .NET的美妙之處在於它非常靈活。理論上,您可以編寫一個控制檯應用程序,該應用程序可以作爲Web服務器運行,也可以作爲桌面應用程序或Windows服務運行。它可以是三合一的。

你總是可以嘗試基於calling executablereferenced assemblies來猜測(System.Windows可能意味着桌面,System.Web可能意味着ASP.NET等),但是這將會充滿錯誤。我編寫了幾個引用Web程序集的桌面應用程序,並且編寫了引用桌面程序集的網站。但是,如果將路徑放在配置文件中,那麼您可能不需要知道上下文......您將不需要使用GetFullPath()或MapPath()就可以獲得所需的完全限定路徑。 )。

如果你真的需要區分,你可以在你的配置文件中包含一個設置。您的DLL的用戶將能夠將程序集配置到它正在使用的環境中。如果他們的配置錯誤......那麼......如果配置錯誤,大多數軟件都會發生故障。事情就是這樣。

或......甚至更好......如果某些任務(如找到文件的路徑)的行爲需要根據開發過程中未知的某些條件進行更改,那麼您可以編寫DLL以支持dependency injection使用戶能夠在需要時提供正確的功能。

+0

實際上謝謝你,我創建的是一個配置文件夾,路徑爲 – 2013-05-03 20:12:04

+1

「接受」答案有助於未來的訪問者找到他們問題的答案。 (請不要感到壓力 - 如果這個答案沒有用,你不需要接受它) – JDB 2013-05-03 20:42:38

+0

對不起,但直到知道我還沒有找到我的問題的直接答案,當我把路徑放在ConfigFile中不代表我完成了我的觀點,無論如何,你的建議是一個很好的建議。 – 2013-05-04 08:14:19