2012-06-26 11 views
11

Mam dziwny problem podczas próby pobrania pul aplikacji na bieżącym komputerze. Wydaje się, że po zainstalowaniu IISExpress, kod Microsoft chce sprawdzić IISExpress oprócz pełnego IIS. IISExpress używa oddzielnych plików aplikacjiHost na użytkownika. Nie jestem pewien, czy to połączenie będzie wymagało sprawdzenia wszystkich tych połączeń, czy tylko tych dla bieżącego użytkownika. Bez względu na to, nie znajduje tego, którego szuka w katalogu "C: \ Windows \ system32 \ config \ systemprofile \". Powinien iść do% userprofile% lub "C: \ Users \ Administrator \" dla użytkownika, dla którego pula aplikacji, której ten kod jest wykonywany, działa jako.Microsoft.Web.Administration.ServerManager szuka w złym katalogu dla aplikacji IISExpressHost.config

Czy ktoś może wiedzieć, skąd ten katalog systemprofile może pochodzić?

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) 

Odpowiedz

2

W jaki sposób próbujesz uzyskać pule aplikacji? Czy korzystasz z API MWH (Microsoft.Web.Administration)?

  1. Pełny system IIS jest dostarczany z Microsoft.Web.Administration.dll (wersja 7.0.0.0).
  2. Usługi IIS Express są dostarczane z inną wersją Microsoft.Web.Administration.dll (wersja 7.9.0.0).

Wygląda na to, że pełny program IIS próbuje użyć zestawu specyficznego dla programu IIS Express. Nie jestem pewien, jak znalazłeś się w tym stanie, ale możesz odinstalować IIS Express i sprawdzić, czy problem nadal występuje.

Edit:

Dlaczego chcesz użyć Microsoft.Web.Administration (MWA) w wersji 7.9.0.0 w aplikacji WWW? Jest dostarczany z IIS Express 7.5, aby pracować TYLKO dla każdego użytkownika pliku applicationhost.config, a to nie działa/działa z plikiem skrzynki odbiorczej/pełnym plikiem konfiguracyjnym IIS, który znajduje się w \ windows \ system32 \ inetsrv \ config \ appliationhost.config.

W twoim przypadku aplikacja internetowa działająca pod pełną usługą IIS działa z tożsamością systemu, dlatego też MWA 7.9.0.0 próbuje załadować plik konfiguracyjny z katalogu "C: \ Windows \ system32 \ config \ systemprofile".

+0

Microsoft.Web.Administracja jest wywoływana z aplikacji internetowej w pełnym IIS. W rzeczywistości używa on wersji 7.9.0.0, która, o ile mogę powiedzieć, nie jest specyficzna dla Expressu, tylko nowsza wersja biblioteki, która dodatkowo obsługuje Express. Odinstalowanie programu Express rozwiązuje problem, a kod kończy się wywoływaniem wersji 7.0.0.0. Wydaje mi się, że jest to problem z najnowszą wersją biblioteki, przynajmniej w mojej sytuacji jest to, co się nie udaje. –

+0

Microsoft.Web.Administration (MWA) w wersji 7.9.0.0 jest dostarczany z IIS Express 7.5 i jest używany tylko przez IIS Express. – vikomall

+1

Dlaczego chcesz używać Microsoft.Web.Administration (MWA) w wersji 7.9.0.0 w swojej aplikacji internetowej? Jest dostarczany z IIS Express 7.5, aby pracować TYLKO dla każdego użytkownika pliku applicationhost.config, a to nie działa/działa z plikiem skrzynki odbiorczej/pełnym plikiem konfiguracyjnym IIS, który znajduje się w \ windows \ system32 \ inetsrv \ config \ appliationhost.config. – vikomall

6

Jeśli aplikacja, w której używasz narzędzia Microsoft.Web.Administration do sprawdzania pul aplikacji, jest uruchomiona na serwerze IISExpress, zawsze będzie przywracana do wersji Microsoft.Web.Administration w wersji 7.9.0.0 z powodu modułu assemblyredirect w aspnet.config w wyrażeniu IIS.

Zobacz C:\Program Files (x86)\IIS Express\config\templates\PersonalWebServer\aspnet.config Tutaj jest problem w config:

<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> 

Sprawdź, czy uruchamiania aplikacji albo w pełnym lub w IIS Visual Studio Development Server.

Alternatywnie można spróbować usunąć przekierowanie zespołu, ale nie próbowałem tego, a to może powodować problemy w innych miejscach. Musimy założyć, że zespół IIS Express wykonał przekierowanie z jakiegoś powodu (innego niż wygoda) :-)

+0

Nie mogę wyrazić, jak bardzo ten komentarz pomógł mi w rozwiązaniu wyjątkowo frustrującego problemu! Dziękuję za wyjaśnienie zachowania i postawienie mnie na właściwej drodze. – spoida

+0

Cieszę się, że pomógł :-) –

5

Już wiem, że odpowiedź jest stara, ale czy próbowałeś podać inną wersję biblioteki dll?

Obraz jest wart tysiąca słów w:

enter image description here

+0

To właściwie poprawna odpowiedź :) – Oleksii

+0

Nie działa dla mnie (VS 2015, framework 4.6.1) – John

+0

W rzeczywistości to nie będzie działać. Właściwość "Specific Version" jest brana pod uwagę tylko w czasie kompilacji, a nie w środowisku wykonawczym. Zajrzyj tutaj, aby uzyskać wyczerpującą odpowiedź: https://stackoverflow.com/questions/24022134/how-exactly-does-specific-version-property-an-assembly-work -work-i – Vinicius

8

Gorąco polecam, aby zatrzymać przy użyciu lokalnego odniesienie do Microsoft.Web.Administration że zostanie dostarczony z IIS (nawet jeśli jest to w GAC). Dzieje się tak dlatego, że ma bardzo specyficzny numer wersji (tj. 7.0.0.0), a ta wersja może ulec zmianie w przyszłej wersji systemu Windows i będzie bolała.

Zamiast tego, sprawdź pakiet nuget: Microsoft.Web.Administration (https://www.nuget.org/packages/Microsoft.Web.Administration). Zasadniczo sprawia to, że możesz mieć prywatne wdrożenie swoich zależności IIS.

+0

Rozwiązało to problem mnie! Dzięki! – RichC

+0

Upewnij się tylko, że odpowiednia wersja znajduje się w pliku App.config/web.config, co nie było dla mnie powodem do niepokoju. – John

0

Odkryłem, że mapowanie "folderu TeamConfig" na moim komputerze programistycznym pomogło mi rozwiązać ten problem.