我们正在
Windows上使用C#和.NET 4.0在Visual Studio 2010中开发多个应用程序.两个SilverLight应用程序使用来自多个WCF项目的服务.另一个是控制台应用程序.
我们希望在一个单独的库项目中放置一些“通用”功能,以便分解和重用代码.由于文件路径处理不同,此库需要知道应用程序是托管(IIS,ASP.NET …),如WCF服务还是作为控制台应用程序运行.
谷歌搜索这个问题,人们表示使用System.Web.dll以了解代码是否托管,使用HttpContext,HostingEnvironment.IsHosted ……问题是这种方法需要包含对System.Web int的引用如果此库将由具有客户端配置文件的控制台项目引用,则不能接受库项目.
我们的想法是使用另一种不涉及使用System.Web程序集的技术.
解决方法
如果您只需要获取包含应用程序的文件夹中的文件的路径(如问题评论中所述),您可以使用:
Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,"filename")
对于ASP.NET应用程序,这将是根文件夹(与MapPath(“〜/”filename)相同),对于控制台应用程序,它将是包含可执行文件的文件夹.
从评论到原始问题:
when running a as console application,just use the filename as a relative path
我不建议使用相对路径.这将与当前工作目录相关,该目录可能与应用程序目录不同.