Ошибка "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 и затем запустить мое приложение. Затем он может получить доступ к временным папкам, которые он не мог раньше.