2012-06-26 20 views
11

Tengo un problema extraño cuando intento obtener los grupos de aplicaciones en la máquina actual. Parece que cuando se instala IISExpress, el código de Microsoft desea comprobar IISExpress además del IIS completo. IISExpress utiliza archivos de ApplicationHost separados por usuario. No estoy seguro de si esta llamada requerirá que compruebe todos esos, o solo aquellos para el usuario actual. De todos modos, no está buscando el que está buscando en el directorio 'C: \ Windows \ system32 \ config \ systemprofile \'. Debería ir a% userprofile% o 'C: \ Users \ Administrator \' para el usuario con el que se está ejecutando el grupo de aplicaciones bajo el que se ejecuta este código.Microsoft.Web.Administration.ServerManager buscando en el directorio incorrecto para IISExpress applicationHost.config

¿Alguien sabe cómo podría proceder este directorio systemmprofile?

Exception:- 
System.IO.DirectoryNotFoundException: Filename: \\?\C:\Windows\system32\config\systemprofile\Documents\IISExpress\config\applicationHost.config 
Error: Cannot read configuration file 


    at Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.GetAdminSection(String bstrSectionName, String bstrSectionPath) 
    at Microsoft.Web.Administration.Configuration.GetSectionInternal(ConfigurationSection section, String sectionPath, String locationPath) 
    at Microsoft.Web.Administration.ServerManager.get_ApplicationPoolsSection() 
    at Microsoft.Web.Administration.ServerManager.get_ApplicationPools() 
    at CustomCode.Classes.IIsApplicationPool.GetApplicationPool(String iisWebSitePath, String poolName) 

Respuesta

2

¿Cómo intenta obtener los grupos de aplicaciones? ¿Está utilizando las API MWH (Microsoft.Web.Administration)?

  1. IIS completo se envía con Microsoft.Web.Administration.dll (versión 7.0.0.0).
  2. IIS Express se envía con una versión diferente de Microsoft.Web.Administration.dll (versión 7.9.0.0).

Parece completo IIS está intentando utilizar el ensamblado específico de IIS Express. No estoy seguro de cómo terminó en este estado, pero puede desinstalar IIS Express y ver si este problema aún ocurre.

Editar:

¿Por qué desea utilizar Microsoft.Web.Administration (MWA) versión 7.9.0.0 en su aplicación web? Se envía con IIS Express 7.5 para trabajar SOLAMENTE con el archivo userhost.config por usuario y esto no utiliza/trabaja con la carpeta de entrada/archivo de configuración de IIS completo que se encuentra en \ windows \ system32 \ inetsrv \ config \ appliationhost.config.

En su caso, la aplicación web que se ejecuta con IIS completo se ejecuta con identidad del sistema y, por lo tanto, MWA 7.9.0.0 intenta cargar el archivo de configuración desde el directorio 'C: \ Windows \ system32 \ config \ systemprofile'.

+0

Se está llamando a Microsoft.Web.Administration desde una aplicación web con IIS completo. De hecho, está utilizando 7.9.0.0 que, por lo que puedo decir, no es específico de Express, solo una versión más nueva de la biblioteca que, además, admite Express. Desinstalar Express soluciona el problema y el código termina llamando a 7.0.0.0. Para mí, parece ser un problema con la última versión de la biblioteca, al menos en mi situación que es lo que está fallando. –

+0

Microsoft.Web.Administration (MWA) versión 7.9.0.0 se incluye con IIS Express 7.5 y solo la utiliza IIS Express. – vikomall

+1

¿Por qué quiere utilizar Microsoft.Web.Administration (MWA) versión 7.9.0.0 en su aplicación web? Se envía con IIS Express 7.5 para trabajar SOLAMENTE con el archivo userhost.config por usuario y esto no utiliza/trabaja con la carpeta de entrada/archivo de configuración de IIS completo que se encuentra en \ windows \ system32 \ inetsrv \ config \ appliationhost.config. – vikomall

6

Si la aplicación, en la que está utilizando Microsoft.Web.Administration para buscar pools de aplicaciones, se ejecuta en IISExpress, siempre recurrirá a Microsoft.Web.Administration versión 7.9.0.0 debido a un assemblyredirect en el aspnet.config en el IIS express.

Ver C:\Program Files (x86)\IIS Express\config\templates\PersonalWebServer\aspnet.config Aquí está el problema en la configuración:

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.Web.Administration" 
        publicKeyToken="31bf3856ad364e35" 
        culture="neutral" /> 
    <bindingRedirect oldVersion="7.0.0.0" 
        newVersion="7.9.0.0" /> 
    <codeBase version="7.9.0.0" 
      href="FILE://%FalconBin%/Microsoft.Web.Administration.dll" /> 
</dependentAssembly> 

Asegúrese de que está ejecutando la aplicación, ya sea en el IIS completo o en el servidor de desarrollo de Visual Studio.

Alternativamente, podría intentar y eliminar el conjunto de redirigir, pero no lo he intentado, y esto podría causar problemas en otros lugares. Debemos asumir que el equipo IIS Express realizó la redirección por algún motivo (que no sea la conveniencia) :-)

+0

¡No puedo expresar cuánto me ayudó este comentario para resolver un problema terriblemente frustrante! Gracias por aclarar el comportamiento y ponerme en el camino correcto. – spoida

+0

me alegro de que haya ayudado :-) –

5

Ya sé que la respuesta es antigua, pero ¿ha intentado especificar una versión diferente de la dll?

Una imagen vale más de mil palabras:

enter image description here

+0

Esa es en realidad una respuesta correcta :) – Oleksii

+0

No funciona para mí (VS 2015, framework 4.6.1) – John

+0

En realidad, esto no funcionará en absoluto. La propiedad "Versión específica" solo se considera en tiempo de compilación, no en tiempo de ejecución. Busque aquí una respuesta completa: https://stackoverflow.com/questions/24022134/how-exactly-does-the-specific-version-property-of-an-assembly-reference-work-i – Vinicius

8

recomiendo encarecidamente a dejar de usar la referencia local a Microsoft.Web.Administration que obtiene enviado con IIS (incluso si es en la GAC). Esto se debe a que tiene un número de versión muy específico (es decir, 7.0.0.0) y esta versión podría cambiar en una versión futura de Windows y le dolería.

En su lugar, revise el paquete nuget: Microsoft.Web.Administration (https://www.nuget.org/packages/Microsoft.Web.Administration). Esto básicamente lo hace para que pueda tener una implementación privada de sus dependencias de IIS.

+0

Esto lo resolvió para ¡yo! ¡Gracias! – RichC

+0

También solo asegúrese de que la versión correcta esté en su App.config/web.config, que no fue el caso para mí a pesar de usar nuget – John

0

Encontré mapear localmente la "carpeta TeamConfig" en mi máquina de desarrollo para ayudar a resolver este problema.

Cuestiones relacionadas