从我的 C# 代码中,它不在 IIS/ASP.NET 中运行,我需要将用户帐户权限添加到 ASP.NET 临时文件夹。(将我的站点添加到 IIS 时需要它。)我本地系统上的文件夹是:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\临时 ASP.NET 文件
我不想将这条路径硬编码到我的代码中,所以我想知道是否可以从 .NET 框架本身检索它?
唔。我不知道会这么复杂。由于缺乏更好的答案,我能够想出这样的事情:
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 临时文件夹的假设hard-coded
。
纠正我,如果你找到更好的方法?
尝试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>
如果您使用自己的临时文件夹,例如 App_Data 会更安全
不幸的是Path.GetTempPath();
不会返回这个文件夹,因为它是 asp.net 内部文件夹。
好消息是您可以使用元素更改它,在 web.config 中指定文件位置。