获取ASP.NET临时文件夹路径

26

我的C#代码无法在IIS/ASP.NET中运行,我需要添加用户帐户权限到ASP.NET临时文件夹(将我的站点添加到IIS时需要)。 我本地系统上的该文件夹路径为:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files

我不想在我的代码中硬编码此路径,所以我想知道是否可以从.NET框架本身中检索它?

5个回答

10

使用System.Web.HttpRuntime.CodegenDir,获取当前应用程序存储ASP.NET临时文件的物理路径。


10

嗯,我不知道这会变得那么复杂。由于没有更好的答案,我能想到的就是这样:

using System.Runtime.InteropServices;

string net_base = Path.GetFullPath(Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), @"..\.."));
string strTemp32 = string.Concat(net_base, @"\Framework\", RuntimeEnvironment.GetSystemVersion(), @"\Temporary ASP.NET Files");
string strTemp64 = string.Concat(net_base, @"\Framework64\", RuntimeEnvironment.GetSystemVersion(), @"\Temporary ASP.NET Files");

显然有两个临时文件夹--用于32位和64位进程。它基于这个示例,也依赖于假设默认的 ASP.NET 临时文件夹是硬编码的。

如果您发现更好的方法,请纠正我?


5

最简单的验证方式:

if (file.ContentLength > 0)
{
    string temp = Path.GetTempPath();

    var path = Path.Combine(temp, fileName);
    file.SaveAs(path);
}

在web.config文件中:

<system.web>
  <compilation tempDirectory="D:\MyTempFiles" />
</system.web>

顶部部分对我来说不是必要的。我所要做的就是更改临时目录以查看已编译的代码。谢谢! - ryanulit

4

如果您在例如App_Data中使用自己的临时文件夹,则会更加安全。

不幸的是,Path.GetTempPath();不会返回此文件夹,因为它是asp.net内部文件夹。

好消息是,您可以通过在web.config中指定文件位置的<tempDirectory>元素来更改它。


谢谢,那是一种方法。但在我的情况下,如果我能推断出这个临时路径,那会更容易些。现在我正在研究中发现了这个路径 %FrameworkInstallLocation%\Temporary ASP.NET Files 但我似乎无法扩展它。你有什么想法吗?这是源代码:http://msdn.microsoft.com/en-us/library/ms366723.aspx - c00000fd
使用此链接 http://msdn.microsoft.com/zh-cn/library/y6k3c7b0.aspx。 变量名为FrameworkInstallLocation。 - Piotr Stapp
抱歉,我刚刚尝试了 Environment.GetEnvironmentVariable("FrameworkInstallLocation"),但是返回了 null - c00000fd

2
我认为这可以帮助您...
web.config/machine.config文件中的compilation tag下有一个默认设置的路径部分。以下是该部分的属性...
文档可在此处查看: Documentation here

你看到我的 C# 代码需要这个路径,但在 IIS 下无法运行。它作为一个提升的 WinForm 应用程序运行,所以当我调用 Path.GetTempPath() 时,会得到 C:\Users\Administrator\AppData\Local\Temp\ - c00000fd
是的,那应该返回用户的临时路径。我现在要删除我的回答了。我错了。你为什么需要这个路径呢? - Naveed Butt
从我的C#代码中,我需要将用户帐户权限添加到ASP.NET临时文件夹。 - c00000fd
我正在编写一个。我无法使用普通的MSI完成所有操作。 - c00000fd
默认设置为空字符串。正如Garath在下面建议的那样,我可以将其填充到其他文件夹中。但是它不会给我那个临时路径... - c00000fd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接