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

Nik*_*rth 4 .net c# asp.net wcf

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

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

JDB*_*JDB 5

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

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

如果没有此配置文件,您可以尝试使用GetTempPath(),但这可能会因ASP.NET失败(在其他情况下可能会失败).

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

如果失败,那么您始终可以告诉用户使用配置文件.


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

你总是可以尝试猜测基础上,引用的程序集的的调用可执行文件(System.Windows可能意味着桌面的System.Web可能意味着ASP.NET等),但是这将是充满了错误.我编写了几个引用Web程序集的桌面应用程序,并且我编写了引用桌面程序集的网站.

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

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

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