从我的C#代码中,不能从IIS / ASP.NET中运行,我需要向ASP.NET临时文件夹添加用户帐户权限。 (将我的站点添加到IIS时需要。)本地系统上的文件夹是:
C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files
我讨厌将这条路径硬编码到我的代码中,所以我想知道我是否可以从.NET框架本身检索它?
答案 0 :(得分:8)
嗯。我不知道会那么复杂。由于缺乏更好的答案,我能够想出这样的东西:
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位进程。它基于this sample,并且还依赖于assumption默认的ASP.NET临时文件夹为hard-coded
。
如果你找到更好的方法,请纠正我?
答案 1 :(得分:8)
尝试System.Web.HttpRuntime.CodegenDir
获取当前应用程序存储ASP.NET临时文件的目录的物理路径。
答案 2 :(得分:4)
如果您使用自己的临时文件夹,例如App_Data
,则会更加安全不幸的是Path.GetTempPath();
不会返回此文件夹,因为它是asp.net内部文件夹。
好消息是您可以使用element更改指定web.config中的文件位置。
答案 3 :(得分:2)
验证的最简单方法:
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>
答案 4 :(得分:1)
我认为这应该有帮助...
默认情况下,路径设置在web.config/machine.config
下的compilation tag
中有一个部分。以下是该部分的属性......