25

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

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

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

4

5 回答 5

9

唔。我不知道会这么复杂。由于缺乏更好的答案,我能够想出这样的事情:

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

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

于 2013-10-02T05:09:37.037 回答
9

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

于 2014-09-20T21:37:23.777 回答
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>
于 2017-04-08T09:26:41.530 回答
4

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

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

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

于 2013-10-02T04:30:51.230 回答
2

我认为这应该有帮助...

默认情况下设置路径web.config/machine.config的位置下有一个部分。compilation tag以下是该部分的属性...

文档在这里

于 2013-10-02T04:20:23.880 回答