Gerardo Contijoch

Experiencias del día a día trabajando con .NET – ASP.NET, C#, ASP.NET MVC y demas…

Error de compilación CS0016 en site corriendo en IIS

Posted by Gerardo Contijoch en diciembre 30, 2008

Hoy por primera vez necesite levantar un site en II7 sobre Windows Vista y me encontré con un viejo problema: el error de compilación CS0016, que se presenta con el siguiente mensaje:

Compiler Error Message: CS0016: Could not write to output file ‘c:\Windows\Microsoft.NET\Framework\[version de framework]\Temporary ASP.NET Files\root\fc8191ba\bb891bec\App_global.asax.pwk2xkjx.dll’ — ‘Access is denied. ‘

El nombre del archivo puede ser diferente ya que es generado dinámicamente al azar.

Este problema no es nuevo, ya que con otras versiones de Windows también sucede lo mismo y se debe a que el usuario con el cual estamos ejecutando el proceso de compilación no tiene permisos de escritura sobre el path indicado ni sobre el directorio temporal de Windows (esto último no lo dice en ningún lado, pero es así). Este usuario es el usuario configurado en el Application Pool asociado a nuestro site. Por defecto es el usuario NETWORK SERVICE, por lo que el problema se soluciona simplemente dándole permisos de modificación y escritura (no es necesario Full Control como figura en muchos lugares) a ese usuario sobre los paths arriba indicados.

Actualización 10/06/2009:

Luego de investigar un poco más sobre este tema, encontré aquí que el problema también puede ser causado el antivirus McAfee. Resulta que este antivirus tiene una característica que bloquea la ejecución de scripts dentro de carpetas temporales y esto puede estar interfiriendo. Para desactivar esta característica sólo tienen que seguir las instrucciones aquí expuestas.

Otra posibilidad es que el directorio de archivos temporales de Windows no este registrado entre las variables de entorno de sistema (algo raro, pero puede pasar si andamos tocando lo que no debemos). Para verificar esto, tenemos que ir a System Properties (o propiedades de Mi PC) y ahi seleccionar el tab Advanced, al final de todo hay un boton llamado Environment variables…, el cual clickeamos y en la sección System variables de la ventana que se abre tendremos que encontrar a TEMP y a TMP. Si no se encuentra alguno de los dos, entonces hay que agregarlos y asociarles como valor el path de los archivos temporales (tipicamente %Systemroot%\Temp). Luego de hacer esto, reinician IIS y listo. Tengan en cuenta que si no estan seguros de lo que hacen es mejor no tocar estos settings porque pueden dejar de funcionar muchas cosas si hacen algo mal.

Referencias:

¡Nos vemos en el próximo post!

Publicado originalmente en https://gerardocontijoch.wordpress.com.

16 comentarios to “Error de compilación CS0016 en site corriendo en IIS”

  1. Franklin Maza said

    Hola
    Mira yo tengo el mismo problema

    Estoy creando un webapp del tipo LOCAL ISS desde visual studio 2008 sp1, con
    windows vista business x64 sp1
    Pero cuando ejecuto la aplicacion me aparece este error

    Mensaje de error del compilador: CS0016: No se puede escribir en el archivo
    de resultados ‘c:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary
    ASP.NET
    Files\logicacode\ae46d81a\28ea9285\App_Web_default.aspx.cdcab7d2.r-uv__u7.dll’
    — ‘Acceso denegado. ‘

    Estoy con el usuario Administrador y aun asi me da esta falla
    Me podria ayudar a correguir el error gracias

  2. Gerardo Contijoch said

    Lo primero que habría que ver es que se tengan permisos de escritura sobre el directorio ‘C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Temporary ASP.NET Files’ para el usuario NETWORK SERVICE. Si no es así, se agrega. También hay que hacer lo mismo con el path ‘C:\WINDOWS\Temp’ para el mismo usuario. Luego, para estar seguros, yo ejecutaría el siguiente comando en el interprete de comandos (command prompt) de windows:
    iisreset -stop
    Esto lo que hace es detener el servicio de IIS (ojo que ese equipo deja de funcionar como web server en este momento, por lo que si hay sites corriendo, estos van a ser detenidos). Con el servicio parado, eliminamos los archivos temporales de ASP.NET (no se puede hacer con el servicio levantado) y luego volvemos a levantar IIS con el siguiente comando:
    iisreset -start
    Espero que con eso alcance. Cualquier duda, vuelve a escribir…

  3. luis said

    Gracias Gerardo Contijoch tuve un problema de este tipo y me funciono..

  4. Gerardo,

    Gracias por este artículo… he estado batallando con mi sitio con este problema, buscando en internet, obviamente haciendo todo lo que dicen los foros pero ninguno me había dado una solución a este problema. Hice lo que mencionas y ya funcionó mi sitio.

    Gracias por la ayuda!

  5. gerardo estrada said

    Hola Gerardo, tenemos el mismo incidente, y ya aplicamos todo lo mencionado, habra alguna otra opcion o alternativa para solventarlo.

    gracias

  6. Hola Gerardo.
    Investigué un poco mas el tema y encontré dos posibles causas más que pueden producir este problema y ambas se encuentran explicadas en el post que fue actualizado.
    Espero que esta vez si puedas resolver el problema.

  7. Alvaro Villagra said

    Gracias. En mi caso tengo Windows Vista y si bien tenía al usuario “Servicio de red” (NETWORK SERVICE) con permiso de modificación en la carpeta “Temporary ASP.NET Files” no lo tenía en la carpeta “\Windows\TEMP”. Coloqué el permiso y ya funciona.
    Saludos.

  8. Franklin Maza said

    Hola
    Alguien ya probo que sucede en windows 7 x64 bits ?

  9. fallen said

    hermano te vas a ir al heaven. me funcó la solución q planteaste. Thanks

  10. N hernandez said

    muchisimas gracias fue de gran ayuda

  11. Evelio said

    Gracias, me funcionó lo de agregar permisos para el usuario “Servicio de red”.

  12. Despues de buscar y buscar en google, me encuentro con este maravilloso artículo tuyo que ha dado solución definitiva a mi problema. Muchas gracias por tomarte el tiempo de hacer este tipo de publicaciones.

    Saludos,

  13. Muhcas gracias, me falta los permisos a la caprta temproal de windows, excelente ayuda

  14. bakerojhon said

    Buenas tardes, mi problema es el siguiente no se puede abrir ‘C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\guamatex\71858171\5a65bac2\App_Web_default.aspx.cdcab7d2.wcmppb1l.dll’ para escritura
    lo cual al buscarlo dentro de la carpeta , no existe el Dll.
    me podrian indicar que debo hacer porque ya he buscado en google, y no he encontrado que me solucione el problema,
    de antemano muchas gracias.

  15. silvertrax said

    Muchas gracias, me ha funcionado!!! Las variables de entorno estaban mal en el servidor!!!

  16. alexander said

    Gracias, me salvaste, estube intentando un monton de cosas hasta ke lei este post. Gracias :) muy buen post :) :) :) :) :) :) :)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: