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

C# 获取ASP.NET临时文件夹路径,c#,asp.net,.net,C#,Asp.net,.net,根据我的C#代码,它不是从IIS/ASP.NET中运行的,我需要向ASP.NET临时文件夹添加一个用户帐户权限。(将我的网站添加到IIS时需要此选项。)我的本地系统上的文件夹是: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时ASP.NET文件 我不喜欢将此路径硬编码到我的代码中,所以我想知道是否可以从.NET framework本身检索它?我认为这应该会有所帮助 在web.config/machine.config的编译标签下有一个部分,默

根据我的C#代码,它不是从IIS/ASP.NET中运行的,我需要向ASP.NET临时文件夹添加一个用户帐户权限。(将我的网站添加到IIS时需要此选项。)我的本地系统上的文件夹是:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时ASP.NET文件


我不喜欢将此路径硬编码到我的代码中,所以我想知道是否可以从.NET framework本身检索它?

我认为这应该会有所帮助

web.config/machine.config
编译标签下有一个部分,默认情况下设置了路径。以下是该部分的属性


如果您在例如App\u数据中使用自己的临时文件夹,则会更加安全

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


好消息是,您可以使用元素指定web.config中的文件位置来更改它

嗯。我不知道会这么复杂。由于没有更好的答案,我想出了这样的办法:

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临时文件夹是硬编码的


如果找到更好的方法,请更正我?

尝试
System.Web.HttpRuntime.CodegenDir
获取当前应用程序存储ASP.NET临时文件的目录的物理路径

最简单的验证方法:

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>


您可以看到,需要此路径的C#代码不是从IIS下运行的。它作为提升的WinForm应用程序运行,因此当我调用
Path.GetTempPath()
yes时,我得到,
C:\Users\Administrator\AppData\Local\Temp\
,它应该返回用户的临时路径。我现在要删除我的答案。我错了。你为什么还需要路径?“从我的C代码中,我需要向ASP.NET临时文件夹添加一个用户帐户权限。”我正在编写一个。我不能用普通MSI做任何事情。默认情况下,它设置为“”。正如Garath在下面建议的那样,我可以将其填写到其他文件夹中。但它不会给我那个临时路径…谢谢,这是一种方法。如果我能推导出这个临时路径,我的情况会更简单。现在进行研究时,我找到了这个路径
%FrameworkInstallLocation%\Temporary ASP.NET文件
,但我似乎无法扩展它。知道怎么做吗?来源如下:使用此链接。变量名为FrameworkIn StallLocation抱歉,我刚刚尝试了
Environment.GetEnvironmentVariable(“FrameworkInstallLocation”)
并得到
null
我不需要上面的部分。我所要做的就是更改temp目录以查看编译后的代码。谢谢