C# 获取IIS中使用的类项目的执行路径

C# 获取IIS中使用的类项目的执行路径,c#,.net,flash,iis,C#,.net,Flash,Iis,我在一个遗留项目中工作,该项目仍然使用flash作为前端 但是后端是c#net 3.5 我创建了一个需要应用程序文件的新功能,为此我使用了: Path.GetDirectoryName(Assembly.GetCallingAssembly().Location) 但它显示了这个错误: 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\sirius2\af2e88a7\10f74a24\assemb

我在一个遗留项目中工作,该项目仍然使用flash作为前端

但是后端是c#net 3.5

我创建了一个需要应用程序文件的新功能,为此我使用了:

Path.GetDirectoryName(Assembly.GetCallingAssembly().Location)
但它显示了这个错误:

'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\sirius2\af2e88a7\10f74a24\assembly\dl3\872c826f\89d0f861\u 6ef5d001\Images' 被拒绝

该项目使用IIS和正确的路径,我们可以在IIS中映射的目录中找到文件夹图像的路径


有办法获得该路径吗?

由于asp.net处理编译代码的方式(通过使用卷影复制文件夹-上面的“临时asp>net文件目录”-您不能使用常规path.XXX静态方法(请参阅以获取更全面的答案)

相反,你可以使用
Server.MapPath(“/”)
它将返回应用程序根目录的物理路径-因此您也可以执行(例如)Server.MapPath(“/Images”)

此答案显示MapPath的其他选项:


为清楚起见(见以下评论):
“/”
将返回相对于域根目录的路径(即
“C:\inetpub\wwwroot”
“~/”返回相对于应用程序实际安装位置的路径
“C/MyCode/MyWebApp”
只有在字符串开头不加正斜杠/反斜杠或波浪号,才能获得如下所述的相对路径行为。

如果您有一个试图访问的静态目录,通常需要指定相对于应用程序根目录的目录。这是使用“~/”完成的。例如,如果您始终希望查找其物理目录,而不管您的请求在哪个目录中执行,则应使用以下命令:

string rootImageDirectory = Server.MapPath("~/Images");

如果不指定波浪号,只使用“/”,则返回的目录相对于当前执行路径,而不是应用程序的根目录。

一些答案使用的是web项目。但我使用的是类项目,而该类项目中未引用服务器类

这确实是DLL的卷影复制造成的问题,但要解决这个问题,我需要使用

Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase.ToString()).LocalPath)
它返回dll的实际路径


谢谢大家的帮助!

我的理解是
MapPAth(“/”)
是可能适合OP的网站根目录。OP没有指定网站的设置方式(即网站下的应用程序等)因此,我链接到了另一个有更多选项的答案。我看不出这篇文章有什么特别的用处。不-这是不正确的。“/”和“~/”之间的区别与请求无关。请参阅链接中@splattne的完整答案。为清楚起见:“/”将返回一个相对于域根的路径(即“C:| inetpub\wwwroot”。~/”返回相对于应用程序实际安装位置的路径“C/MyCode/MyWebApp”,仅通过不以正斜杠/反斜杠或平铺开头的字符串来获取您所谈论的相对行为。您能否进行快速编辑,我将删除下一票?这是web环境中定位bin文件夹的最佳正确解决方案