web-dev-qa-db-fra.com

Erreur "CS0016: Impossible d'écrire dans le fichier de sortie" lors du démarrage d'une application dans IIS 7

J'utilise Windows 7 et ne suis généralement pas un développeur dans ce contexte. J'ai récemment créé un service de repos WCF en C #, que j'essaie maintenant de déployer sur IIS, uniquement sur mon ordinateur local. Après de nombreuses disputes, j'ai configuré l'application, mais lorsque je navigue dans cette application, un message d'erreur s'affiche: Erreur de compilation

Description: une erreur s'est produite lors de la compilation d'une ressource requise pour traiter cette demande. Veuillez consulter les détails d'erreur spécifiques suivants et modifier votre code source de manière appropriée. 

Message d'erreur du compilateur: CS0016: Impossible d'écrire dans le fichier de sortie 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Fichiers ASP.NET temporaires\scom_sibyll\8c0b945e\9329016\App_global.asax.eagmqgcd.dll' - 'L'accès est refusé. '

J'ai cherché le Web au meilleur de mes capacités et j'ai modifié les autorisations sur le chargeur de fichiers ASP.NET temporaire pour permettre au compte de service réseau de bénéficier de tous les droits et procédé de la même manière avec le dossier Temp. Il copie un certain nombre de fichiers avant d’échouer, de sorte qu’il possède probablement des autorisations d’écriture. J’ai donc vérifié les autorisations de lecture de mon dossier source, ce qui fonctionne également. J'ai en outre noté qu'il craignait qu'il essaye de mettre en cache le fichier DLL, et j'ai essayé de désactiver ma protection antivirus, ainsi que de désactiver le contrôle de compte d'utilisateur, juste pour voir si je pouvais comprendre ce qui le bloque. se produisant. Je suis à court d'idées maintenant. Quelqu'un a des suggestions?

15
jasonpgignac

On dirait que le compte sous lequel le service WCF est exécuté n'a pas le droit d'écrire dans le répertoire "Fichiers temporaires ASP.NET".

Vous pouvez également essayer de relancer regiis.

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

ASP.NET IIS Outil d'enregistrement (Aspnet_regiis.exe)

10
MattC

Pour ceux qui cherchent ici comme je l'ai fait, si la réponse acceptée ne résout pas le problème, essayez de suivre cet article: http://lordzoltan.blogspot.com/2011/02/aspnet-2-and-4-default -application-pool.html

En résumé, il semble que la même erreur soit parfois affichée lorsque l'utilisateur du pool d'applications n'a pas accès au dossier% TMP% /% TEMP%. 

Vous devrez accorder à IIS_IUSRS un accès en lecture et en modification sur le dossier temporaire de l'utilisateur sur lequel le pool d'applications est exécuté .

Il peut s'agir du dossier temporaire dans le profil de l'utilisateur du pool d'applications, par exemple. c:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp ou le dossier système temporaire à c:\windows\temp.

Configurer cela a résolu le problème pour moi.

48
zcrar70

Sous Windows 8/Server 2012, aspnet_regiis n'est plus pris en charge. J'ai essayé de réinstaller en utilisant les fonctionnalités de Windows: échec. J'ai essayé de réinstaller IIS: échec. J'ai essayé de réinstaller via WebPI: échec.

J'ai résolu le problème en définissant les ACL dans le répertoire temporaire Windows.

Voici un PowerShell qui fait le travail:

$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

Il y a 3 étapes à faire:

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

Erreur résolue

Vous pouvez également essayer de réexécuter regiis. "% Windir%\Microsoft.NET\Framework [structure associée]\aspnet_regiis -i"

5
ab85

Cette base de connaissances l'a résolu pour moi. Il semble que le chemin du fichier temporaire était inexistant dans les variables d'environnement du système d'exploitation.

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

2
user3657646

La même erreur se produisait lorsque je développais une API Web en utilisant asp.net core 2.0. Elle a été résolue après le redémarrage de la machine.

1

Pour moi, la solution était une combinaison des correctifs décrits ici. Je devais donner au compte NETWORK_SERVICE le contrôle total sur 

C:\Windows\Temp

et 

C:\Windows\Microsoft.NET\Framework [infrastructure associée]\Fichiers ASP.NET temporaires \

et changez également l'identité du pool d'applications en NetworkService.

De plus, n'oubliez pas de redémarrer IIS après avoir accordé le contrôle total à NETWORK_SERVICE sur les dossiers Temp.

1
IonutC

J'ai accordé un accès en lecture et en écriture à C:\Windows\Temp pour le groupe IIS_WPG. Cela a fonctionné pour moi. Je suis sur Server 2003 R2 et IIS 6 et le nom du groupe est différent. Je le trouve depuis http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis/ où il est écrit:

• Le compte intégré IUSR remplace le compte IUSR_MachineName. 

• Le groupe intégré IIS_IUSRS remplace le groupe IIS_WPG. 

Merci à Dommer d’avoir suggéré le dossier temporaire Windows et à zcrar70 pour l’été Nice et un lien avec une description détaillée.

1
Nedcode

J'ai des permissions mais je commence à avoir cette erreur. "Redémarrer la machine" fonctionne pour moi

0
elfekz

Parfois, les fichiers temporaires peuvent être verrouillés par un autre processus du poste de travail. Dans un premier temps, veuillez redémarrer le poste de travail et vérifier l’application.

0
user2202819

Sous Windows 8, rien ne fonctionnait pour moi. Un jour, les pools d'applications ont soudainement décidé qu'ils ne souhaitaient plus travailler sous le compte NetworkService.

J'ai résolu le problème en modifiant le pool d'applications pour qu'il fonctionne sous mon propre compte utilisateur. Ce n'est pas une bonne solution, mais ça a fonctionné.

0
BrettB

Cette erreur se produit lorsque j'utilise un fichier bat pour supprimer des fichiers temporaires. Il supprime probablement le répertoire lui-même et les autorisations données ont disparu. Donc, vous devez les restaurer en quelque sorte.

Le moyen le plus simple consiste à accorder un contrôle total sur les répertoires suivants pour Tout le monde:

C:\Windows\Temp

C:\Windows\Microsoft.NET\Framework [infrastructure associée]\Fichiers ASP.NET temporaires \

0
x-freestyler