CS0016: ошибка недопустимого каталога

Два дня я боролся с загадочной ошибкой при компиляции веб-сайта ASP.NET. Ошибка (довольно известная) CS0016: «Невозможно записать в выходной файл [имя файла] — каталог недействителен».

После двух дней отладки я обнаружил, что причина моей проблемы в том, что NetworkService каким-то образом не имеет необходимых прав на C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files. Я добавил «Все» с полными правами в папку, но я по-прежнему не могу получить доступ к http://localhost, и я вижу с помощью Process Monitor от SysInternals, что учетная запись NetworkService получает «ИМЯ НЕ НАЙДЕНО» при попытке создать DLL-файл в этот каталог. Моя интерпретация заключается в том, что у него почему-то нет достаточных прав на папку.

Однако, когда я запускаю Visual Studio и подключаю отладчик, файлы компилируются с использованием моего пользователя домена (JohnDoe для справки), и по какой-то причине это работает нормально, как если бы учетная запись пользователя домена содержит дополнительные права, чем я не могу дать локальные пользователи на моей машине, что меня очень озадачивает.

Мои два вопроса к вам, ребята: почему, когда я добавляю «Все» с полными правами в папку, у NetworkService все еще нет прав, необходимых для создания необходимых временных файлов? И какие права есть у моего пользователя домена JohnDoe, которые я не могу предоставить своим локальным пользователям на своем компьютере?


person kerbou    schedule 26.05.2009    source источник


Ответы (4)


Вам необходимо предоставить разрешение NetworkService на временный каталог вашей системы (каталог в переменной Temp). Это связано с тем, что временные файлы asp.net сначала записываются в эту временную папку, а затем перемещаются в каталог временных файлов Интернета ASP.NET.

person Galilyou    schedule 26.05.2009
comment
Ну, на самом деле я не уверен, возможно, вам стоит попробовать здесь support.microsoft.com/ kb/825791/en-us - person Galilyou; 26.05.2009

Оказалось, что у меня была переменная среды TEMP, указывающая на RAM-диск, которого больше не существовало... Это не имело никакого отношения к упомянутым пользовательским проблемам. Извлеченный урок: существуют переменные TEMP как для пользователя, так и для системы!!! ЕСТЬ ДВА!!! Я уже думал об этом сценарии и изменил переменную для пользователя, но пропустил ту, что касается системы. Почему-то компьютеру сложно записывать временные файлы в папку на диске, к которому у него нет доступа....

Ø"#¤/(%"/#¤%"(/=("(!§##§¤%"!#!"!!

Дело закрыто.

person kerbou    schedule 26.05.2009
comment
Разве мой ответ не должен быть принят? как я упомянул об этом случае и дал ссылку в комментарии!?? - person Galilyou; 26.05.2009
comment
Моя вина - я немного неопытен в использовании StackOverflow :о) - person kerbou; 26.05.2009

У меня была эта проблема в течение нескольких дней у нового клиента. Я использовал образ VMWare, указывая на исходный код на общем ресурсе. Я дал пользователю «все» полный доступ, но проблема все еще не устранена.

Поскольку я скопировал общий ресурс на диск виртуальной машины, у меня еще не было проблемы (просто пробовал несколько раз, но видел постоянный успех по сравнению с постоянным сбоем, который у меня был раньше). Происходило как с VS2005, так и с VS2008.

person NealWalters    schedule 02.03.2010

В моем случае ошибка была вызвана тем, что переменные среды TEMP и TMP учетной записи, которая запускает приложение ASP.NET, указывали на несуществующий каталог.

person TheArtTrooper    schedule 27.07.2017
comment
Сегодня снова столкнулся с этой проблемой. Забавно найти мой ответ, когда я искал. Однако на этот раз переменные среды TEMP и TMP были неправильно сохранены в реестре как REG_SZ вместо REG_EXPAND_SZ. Эффект был тот же: переменные указывали на несуществующую папку. - person TheArtTrooper; 05.08.2019