如何确定托管我的dll的位置

时间:2013-05-03 18:30:18

标签: c# asp.net .net wcf

我需要知道托管程序集的上下文(ASP.NET,Windows服务,Windows应用程序等)。

我的程序集应该根据上下文调用不同的函数。例如,如果需要创建相对于其位置的文件夹,我想知道使用哪种方法:Path.GetFullPath(dirName)Server.MapPath(dirName)

1 个答案:

答案 0 :(得分:5)

听起来您正在开发一个DLL供其他开发人员使用。听起来好像是在尝试创建不知道和/或无法控制环境的临时文件。

如果以上情况属实,最好创建一个配置文件(位于与DLL相同的目录中),其中包含用于临时文件的路径。 (或者,更好的是,使用App.Config中的AppSettings或类似于Log4Net的Web.Conf。

如果没有此配置文件,您可以尝试使用GetTempPath(),但在其他情况下可能会fail for ASP.NET(和may fail)。

如果您无法创建临时文件,可以尝试将所需信息存储在内存中(例如,使用MemoryStream)。

如果失败,那么您总是可以告诉用户使用配置文件。


在回答您的实际问题时,我不知道如何可靠地说出您正在使用的项目类型。 .NET的优点在于它非常灵活。理论上,您可以编写一个能够作为Web服务器或桌面应用程序或Windows服务运行的控制台应用程序。它可以是三合一。

您总是可以尝试根据referenced assembliescalling executable进行猜测(System.Windows可能意味着桌面,System.Web可能意味着ASP.NET等),但这将是充满了错误。我编写了几个引用Web程序集的桌面应用程序,并且我编写了引用桌面程序集的网站。

但是,如果你把路径放在你的配置文件中,那么你可能不需要知道上下文...你已经拥有了你需要的完全限定路径而无需使用GetFullPath()或MapPath()

如果您确实需要区分,可以在配置文件中包含一个设置。 DLL的用户可以将程序集配置到使用它的环境。如果他们的配置错误......那么......如果配置错误,大多数软件都会出现故障。这就是它的方式。

或者......甚至更好......如果某些任务的行为(例如查找文件的路径)需要根据开发过程中未知的某些条件进行更改,那么您可以编写DLL以支持{{3使您的用户能够在需要时提供适当的功能。