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

时间:2015-09-22 19:57:36

标签: c# .net flash iis

我正在使用仍然使用闪存作为前端的遗留项目。

但是后端是在c#.net 3.5中。

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

Path.GetDirectoryName(Assembly.GetCallingAssembly().Location)

但它显示错误:

  

'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET   文件\ sirius2 \ af2e88a7 \ 10f74a24 \装配\ DL3 \ 872c826f \ 89d0f861_6ef5d001 \图片   被拒绝

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

有没有办法获得这条路?

3 个答案:

答案 0 :(得分:5)

有些答案正在使用网络项目。但我使用的是Class Project,并且在这种项目中没有引用Server类。

真的是由dll的卷影副本创建的问题,但要解决我需要使用

Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase.ToString()).LocalPath)

它返回dll的真实路径。

谢谢大家的帮助!

答案 1 :(得分:1)

由于asp.net处理编译代码的方式(通过使用Shadow Copy文件夹 - 上面的“临时ASP> NET文件目录” - 你不能使用常规的Path.XXX静态方法(参见What is the "Temporary ASP.NET Files" folder for?为了更全面的答案)。

相反,你可以使用 Server.MapPath("/") 这将返回应用程序根目录的物理路径 - 所以你也可以(例如)Server.MapPath(“/ Images”)。

此答案显示了MapPath的其他选项: https://stackoverflow.com/a/275791/990323

为清楚起见(来自以下评论): "/"将返回相对于域根的路径(即"C:\inetpub\wwwroot""~/"返回相对于应用程序实际安装位​​置的路径"C/MyCode/MyWebApp"仅通过不开始带有正向/反斜杠或波形符的字符串可以获得相对路径行为,如下所述。

答案 2 :(得分:0)

如果您有一个尝试访问的静态目录,通常需要指定相对于应用程序根目录的目录。这是使用“〜/”完成的。例如,如果您始终想要找到http://myapplication/images的物理目录,而不管您的请求执行的目录是什么,那么您将使用以下内容:

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

如果你没有指定代字号并只使用“/”,那么返回的目录是相对于当前执行路径而不是应用程序的根目录。