Ошибка "CS0016: Не удалось записать в выходной файл" при запуске приложения в IIS 7
Я запускаю Windows 7 и обычно не являюсь разработчиком в этом параметре и недавно создал службу WCF Rest на С#, которую я сейчас пытаюсь развернуть в IIS только на своей локальной машине. После долгих споров я настраиваю приложение, но когда я перехожу к приложению, появляется сообщение об ошибке: Ошибка компиляции
Описание. Произошла ошибка во время компиляции ресурса, необходимого для обслуживания этого запроса. Ознакомьтесь с приведенными ниже конкретными данными об ошибках и соответствующим образом измените исходный код.
Сообщение об ошибке компилятора: CS0016: не удалось записать в выходной файл 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Временные файлы ASP.NET\scom_sibyll\8c0b945e\9329016\App_global.asax.eagmqgcd.dll ' -- 'В доступе отказано.
Я охотился на Интернет, насколько это возможно, и изменил разрешения на временный файловый фреймворк ASP.NET, чтобы разрешить полную учетную запись учетной записи сетевой службы и сделать то же самое с папкой Temp. Он копирует несколько файлов перед сбоем, поэтому он имеет права на запись, предположительно, поэтому я проверил разрешения для чтения из моей исходной папки, и это тоже работает. Я также отметил, что он разбирается, когда пытается кэшировать DLL файл, и попытался отключить мою антивирусную защиту, а также отключить UAC, просто чтобы узнать, могу ли я понять, что блокирует это. Теперь я свеж от идей. У кого-нибудь есть предложения?
Ответы
Ответ 1
Похоже, что учетная запись, с которой работает служба WCF, не имеет доступа к записи в каталог "Временные файлы ASP.NET".
Вы также можете попробовать повторно запустить regiis.
% windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -i
Средство регистрации ASP.NET IIS (Aspnet_regiis.exe)
Ответ 2
Для тех, кто выглядит здесь, как я, если принятый ответ не решает проблему, вы можете попробовать выполнить следующую статью: http://lordzoltan.blogspot.com/2011/02/aspnet-2-and-4-default-application-pool.html
В целом, кажется, что такая же ошибка иногда отображается, когда пользователь пула приложений не имеет доступа к папке% TMP%/% TEMP%.
Вам необходимо предоставить IIS_IUSRS возможность читать и изменять доступ к временной папке пользователя, в котором работает пул приложений.
Это может быть либо временная папка в профиле пользователя пула приложений, например. c:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
, или системную папку temp в c:\windows\temp
.
Настройка этого разрешила проблему для меня.
Ответ 3
В Windows 8/Server 2012 больше нет поддержки aspnet_regiis.
Я попытался переустановить, используя функции Windows: сбой.
Я попытался переустановить IIS: сбой.
Я попытался переустановить через WebPI: сбой.
Я решил проблему, установив ACL в Windows Temp Directory.
Вот силовая часть, которая выполняет задание:
$dir = "C:\Windows\Temp"
$acl = get-acl -path $dir
$new = "IIS_IUSRS","Modify","ContainerInherit,ObjectInherit","None","Allow"
$accessRule = new-object System.Security.AccessControl.FileSystemAccessRule $new
$acl.SetAccessRule($accessRule)
$acl | Set-Acl $dir
Ответ 4
Есть 3 шага:
1 - check if "Application Pool Identity" is NetworkService
2 - NETWORK_SERVICE account needs full control on:
. C:\Windows\Temp
. C:\Windows\Microsoft.NET\Framework[related framework]\Temporary ASP.NET Files\
3 - restart the IIS
Ошибка решена
Вы также можете попробовать повторно запустить regiis.
"% windir%\Microsoft.NET\Framework [связанная структура]\aspnet_regiis -i"
Ответ 5
Этот KB разрешил его для меня, кажется, что путь к файлу temp не существует в переменных среды ОС.
http://support.microsoft.com/kb/825791
Ответ 6
Я предоставил доступ для чтения и записи к C:\Windows\Temp для группы IIS_WPG. Это сработало для меня. Я на сервере 2003 R2 и IIS 6, и название группы отличается. Я исправлю это из http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/, где говорится:
• Встроенная учетная запись IUSR заменяет учетную запись IUSR_MachineName.
• Встроенная группа IIS_IUSRS заменяет группу IIS_WPG.
Спасибо Dommer за то, что предложили папку temp windows и zcrar70 для приятного летнего времени и ссылку с подробным описанием.
Ответ 7
Для меня решение было комбинацией описанных здесь исправлений. Я должен был полностью настроить учетную запись NETWORK_SERVICE на
C:\Windows\Temp
и
C:\Windows\Microsoft.NET\Framework [связанная структура]\Временные файлы ASP.NET\
а также изменить идентификатор пула приложений в NetworkService.
Также не забудьте перезапустить IIS после полного управления NETWORK_SERVICE в папках Temp
Ответ 8
Я получил ту же ошибку при разработке веб-API с использованием asp.net core 2.0, и она была решена после перезагрузки компьютера.
Ответ 9
Иногда файлы Temp могут быть заблокированы другим процессом на рабочей станции. В качестве первого шага перезагрузите рабочую станцию и проверьте приложение.
Ответ 10
В Windows 8 абсолютно ничего не работало для меня. Однажды пулы приложений вдруг решили, что они больше не хотят работать под учетной записью NetworkService.
Я решил проблему, изменив пул приложений, чтобы работать под своей учетной записью пользователя. Не отличное решение, которое я знаю, но оно сработало.
Ответ 11
Эта ошибка возникает, когда я использую файл bat для удаления временных файлов. Вероятно, он удалит сам каталог, и данные разрешения исчезли. Поэтому вам нужно как-то их восстановить.
Самый простой способ - предоставить полный контроль над следующими каталогами для всех:
C:\Windows\Temp
C:\Windows\Microsoft.NET\Framework [связанная структура]\Временные файлы ASP.NET\
Ответ 12
У меня есть разрешения, но я начинаю получать эту ошибку.
"перезагрузка машины" работает для меня
Ответ 13
Я начал получать эту ошибку слишком недавно в корпоративной среде после того, как компания внедрила различные меры безопасности, которые забрали права администратора у пользователей.
Для разработчиков компания разрешила создание учетных записей, которые можно было использовать, и нам пришлось добавить их в группу администраторов ПК, а затем изменить удостоверение пула приложений, чтобы использовать учетную запись.
ПРИМЕР (Windows 10)
Аккаунт создан для разработчиков: домен\разработчик
Кто-то с правами администратора на ПК должен будет сделать следующее:
- Перейдите в Панель управления\Учетные записи пользователей\Управление учетными записями пользователей.
- Перейдите на вкладку "Дополнительно" и нажмите кнопку "Расширенное управление пользователями".
- На странице lusrmgr щелкните папку Группы в левом столбце, чтобы вызвать группы на центральной панели.
- Затем вторично щелкните группу "Администраторы" и выберите "Добавить в группу..."
- На панели "Свойства администратора" нажмите кнопку "Добавить...".
- Откроется диалоговое окно "Выбор пользователей, компьютеров, учетных записей служб или групп". Добавьте учетную запись (домен\разработчик в этом примере)
- Затем нажмите кнопку ОК (эта кнопка будет отключена, если у вас нет прав администратора)
Теперь настройте пул приложений:
- Откройте диспетчер IIS, выберите "Пулы приложений".
- Щелкните нужный пул приложений, чтобы он выделился, затем нажмите "Дополнительные параметры..." на панели "Действия" справа.
- В разделе "Модель процесса" выберите параметр "Идентичность" и кнопку "Эллипсы".
- В диалоговом окне "Идентификация пула приложений" выберите "Пользовательская учетная запись" и нажмите кнопку "Установить".
- Введите учетную запись и пароль
На этом этапе я смог закрыть все, перезапустить IIS и затем запустить мое приложение. Затем он может получить доступ к временным папкам, которые он не мог раньше.