在编译ASP.NET网站时,我一直在争取两天追踪一个神秘的错误。错误是(非常有名)CS0016:“无法写入输出文件[文件名] - 目录无效”。
经过两天的调试后我发现问题的原因是NetworkService不知道C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files的必要权限。我添加了“Everyone”并拥有该文件夹的完全权限 - 但我仍然无法访问http://localhost
我可以看到使用来自SysInternals的Process Monitor,当尝试创建一个NetworkService帐户时,它会获得“NAME NOT FOUND”该目录中的DLL文件。我的解释是它对文件夹没有足够的权利。
然而 - 当我启动Visual Studio并附加调试器时,文件是使用我的域用户(JohnDoe作为参考)编译的,并且由于某种原因可以正常工作 - 好像域用户帐户包含的权利比我无法给我的机器上的本地用户 - 这让我很困惑。
我向你们提出的两个问题是:为什么当我添加具有文件夹完全权限的“Everyone”时,NetworkService仍然没有创建所需临时文件所需的权限?我的JohnDoe域用户拥有哪些权限,我无法在我的计算机上授予本地用户权限?
答案 0 :(得分:3)
您需要向系统临时目录(Temp变量中的目录)授予NetworkService权限。这是因为临时asp.net文件在被移动到ASP.NET Temporary Internet Files目录之前首先被写入此临时文件夹。
答案 1 :(得分:2)
事实证明,我有一个指向RAM驱动器的TEMP环境变量,它不再存在......它与提到的用户问题没有任何关系。获得的经验教训:用户和系统都有两个TEMP变量!那里有两个!!!我已经考虑过这种情况并为用户更改了变量 - 但我错过了关于系统的变量。不知何故,计算机很难将临时文件写入无法访问的驱动器上的文件夹....
Ø “#¤/(%”/#¤% “(/ =(”(!§##§¤% “!#!” !!
案件结案。
答案 2 :(得分:0)
我在新客户的几天里遇到了这个问题。我正在使用VMWare映像,指向共享上的源代码。我给用户“每个人”完全访问权限,但仍然是gettign问题。
由于我将共享复制到VM磁盘,还没有遇到问题(到目前为止只尝试了几次,但看到了一致的成功与之前我遇到的一致失败)。发生在VS2005和VS2008上。
答案 3 :(得分:0)
在我的情况下,错误是由运行指向不存在的目录的ASP.NET应用程序的帐户的TEMP和TMP环境变量引起的。