Ошибка «CS0016: не удалось записать в выходной файл» при запуске приложения в IIS 7 - PullRequest
15 голосов
/ 14 марта 2011

Я использую Windows 7 и обычно не являюсь разработчиком в этой настройке, и недавно создал службу отдыха WCF в C #, которую я сейчас пытаюсь развернуть в 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, чтобы посмотреть, смогу ли я выяснить, что блокирует это. Я свежа из идей сейчас. У кого-нибудь есть предложения?

Ответы [ 13 ]

49 голосов
/ 22 марта 2011

Для тех, кто смотрит здесь так же, как и я, если принятый ответ не решает проблему, попробуйте следующую статью: 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 или системная временная папка на c:\windows\temp.

Установка этого решала проблему для меня.

10 голосов
/ 14 марта 2011

Похоже, учетная запись, под которой работает служба WCF, не имеет доступа для записи в каталог «Temporary ASP.NET Files».

Вы также можете попробовать повторно запустить regiis.

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis -i

Инструмент регистрации ASP.NET IIS (Aspnet_regiis.exe)

7 голосов
/ 07 октября 2012

В Windows 8 / Server 2012 больше нет поддержки aspnet_regiis.Я попытался переустановить с помощью функций Windows: сбой.Я попытался переустановить IIS: не удалось.Я попытался переустановить через WebPI: не удалось.

Я решил проблему, установив списки ACL для временного каталога Windows.

Вот PowerShell, который выполняет эту работу:

$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
5 голосов
/ 30 сентября 2015

Есть 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

Устранена ошибка

Вы также можете попробовать повторно запустить режим. "% windir% \ Microsoft.NET \ Framework [связанные рамки] \ aspnet_regiis -i"

2 голосов
/ 29 мая 2014

Этот КБ разрешил его для меня, похоже, что путь к временному файлу не существовал в переменных среды ОС.

http://support.microsoft.com/kb/825791

1 голос
/ 25 мая 2018

Я получил ту же ошибку при разработке веб-API с использованием asp.net core 2.0, и она была устранена после перезагрузки компьютера.

1 голос
/ 16 апреля 2015

Для меня решением было сочетание исправлений, описанных здесь.Мне пришлось предоставить учетной записи NETWORK_SERVICE полный контроль над

C: \ Windows \ Temp

и

C: \ Windows \ Microsoft.NET \ Framework [связанные рамки]\ Временные файлы ASP.NET \

, а также измените удостоверение пула приложений на NetworkService.

Также не забудьте перезапустить IIS после предоставления полного контроля над NETWORK_SERVICE в папках Temp

1 голос
/ 05 июля 2012

Я предоставил права на чтение и запись в 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 за предложение временной папки Windows и zcrar70 за приятное лето и ссылку с подробным описанием.

0 голосов
/ 16 мая 2019

Я начал получать эту ошибку слишком недавно в корпоративной среде после того, как компания внедрила различные меры безопасности, которые забрали права администратора у пользователей.

Для разработчиков компания разрешила создание учетных записей, которые можно было использовать, и нам пришлось добавить их в группу администраторов ПК, а затем изменить идентификатор пула приложений для использования учетной записи.

ПРИМЕР (Windows 10)

Аккаунт создан для разработчиков: домен \ разработчик

Кто-то с правами администратора на ПК должен будет сделать следующее:

  • Перейдите в Панель управления \ Учетные записи пользователей \ Управление учетными записями пользователей
  • Перейдите на вкладку «Дополнительно» и нажмите кнопку «Расширенное управление пользователями»
  • На странице lusrmgr щелкните папку Группы в левом столбце, чтобы вызвать группы на центральной панели
  • Затем вторично щелкните группу «Администраторы» и выберите «Добавить в группу ...»
  • На панели «Свойства администратора» нажмите кнопку «Добавить ...»
  • Открывается диалоговое окно «Выбор пользователей, компьютеров, учетных записей служб или групп». Добавьте учетную запись (домен \ разработчик в этом примере)
  • Затем нажмите кнопку ОК (эта кнопка будет отключена, если у вас нет прав администратора)

Теперь настройте пул приложений:

  • Откройте диспетчер IIS, выберите Пулы приложений
  • Щелкните нужный пул приложений, чтобы он выделился, затем нажмите «Дополнительные параметры ...» на панели «Действия» справа
  • В разделе «Модель процесса» выберите параметр «Идентичность» и кнопку с многоточием
  • В диалоговом окне «Идентификация пула приложений» выберите «Пользовательская учетная запись» и нажмите кнопку «Установить»
  • Введите учетную запись и пароль

В этот момент я смог закрыть все, перезапустить IIS и запустить приложение. Затем он может получить доступ к временным папкам, которых раньше не мог.

0 голосов
/ 22 мая 2017

У меня есть разрешения, но я начинаю получать эту ошибку. у меня работает "перезагрузка машины"

...