我正在使用仍然使用闪存作为前端的遗留项目。
但是后端是在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中映射的目录中。
有没有办法获得这条路?
答案 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");
如果你没有指定代字号并只使用“/”,那么返回的目录是相对于当前执行路径而不是应用程序的根目录。