Microsoft.Web.Administration.ServerManager在IISExpress applicationHost.config中查找错误的目录

时间:2012-06-26 13:23:42

标签: iis iis-express

尝试在当前计算机上获取应用程序池时,我遇到了一个奇怪的问题。似乎在安装IISExpress时,除了完整的IIS之外,Microsoft代码还要检查IISExpress。 IISExpress为每个用户使用单独的applicationHost文件。我不确定这个电话是否会要求它检查所有这些,或者只是当前用户的那些。无论如何,它找不到它在'C:\ Windows \ system32 \ config \ systemprofile \'目录中寻找的那个。对于正在执行此代码的应用程序池的用户,它应该转到%userprofile%或'C:\ Users \ Administrator \'。

有没有人知道这个systemprofile目录可能来自哪个?

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)

6 个答案:

答案 0 :(得分:8)

我强烈建议您停止使用IIS附带的Microsoft.Web.Administration的本地引用(即使它在GAC中)。这是因为它有一个非常特定的版本号(即7.0.0.0),这个版本可能会在未来的Windows版本中发生变化,而且会受到影响。

相反,请检查nuget包:Microsoft.Web.Administrationhttps://www.nuget.org/packages/Microsoft.Web.Administration)。这基本上使得您可以私有部署IIS依赖项。

答案 1 :(得分:6)

如果您使用Microsoft.Web.Administration检查应用程序池的应用程序正在IISExpress上运行,则由于aspnet中的程序集直接,它将始终回退到Microsoft.Web.Administration版本7.9.0.0 IIS快递中的.config。

参见C:\Program Files (x86)\IIS Express\config\templates\PersonalWebServer\aspnet.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>

确保在完整的IIS或Visual Studio开发服务器上运行该应用程序。

另外,您可以尝试删除程序集重定向,但我没有尝试过,这可能会导致其他地方出现问题。我们必须假设IIS Express团队出于某种原因(除了方便之外)进行了重定向: - )

答案 2 :(得分:5)

我已经知道答案已经过时了 你试过指定一个不同版本的DLL吗?

一张图片胜过千言万语:

enter image description here

答案 3 :(得分:2)

您是如何尝试获取应用程序池的?您使用的是MWH(Microsoft.Web.Administration)API吗?

  1. 完整IIS附带Microsoft.Web.Administration.dll(版本7.0.0.0)。
  2. IIS Express附带了不同版本的Microsoft.Web.Administration.dll(版本7.9.0.0)。
  3. 似乎完整的IIS正在尝试使用IIS Express特定的程序集。我不确定您是如何处于此状态的,但您可以卸载IIS Express并查看是否仍然出现此问题。

    编辑:

    为什么要在Web应用程序中使用Microsoft.Web.Administration(MWA)版本7.9.0.0?它随IIS Express 7.5一起提供,仅用于每个用户的applicationhost.config文件,并且不使用/使用位于\ windows \ system32 \ inetsrv \ config \ appliationhost.config的inbox /完整IIS配置文件。

    在您的情况下,在完整IIS下运行的Web应用程序正在运行系统标识,因此MWA 7.9.0.0正在尝试从“C:\ Windows \ system32 \ config \ systemprofile”目录加载配置文件。

答案 4 :(得分:1)

我最近遇到了这个问题。在阅读了好几篇文章之后,这是使我对正在发生的事情有任何了解的最接近的文章。在VS IDE中运行时,虽然不一定能解决两个版本(7.0.0.0和7.9.0.0)之间的冲突,但经过数小时的努力之后,我确实发现了一个可以解决的奇特技巧解决IDE的自动重定向问题。

在以下示例中:

开发一个应用程序,该应用程序从inetsrv目录中引用Microsoft.Web.Administration.dll(7.0.0.0),并尝试执行以下任一操作,并尝试正确连接以访问真实IIS(而不是IIS Express)的应用程序池定义,未安装。在IDE外部运行编译后的代码时,无论如何指定,它始终可以正常工作。

  • ServerManager sm = new ServerManager();
  • sm.OpenRemote(“ localhost”);
  • sm.OpenRemote(“ MYPC”); //假设您本地计算机的名称是MYPC

这些全部触发VS将引用从7.0.0.0 DLL重定向到7.9.0.0,这将导致检索错误的站点或COM异常。

我发现的怪癖是总是尝试使用OpenRemote(),即使尝试打开本地IIS并将“ localhost”或“ MYPC”指定为“ LocalHost”或“ MyPc”(即混合大小写的任何组合)不是与“ localhost”(全部小写)或本地计算机名称完全区分大小写。

此怪癖可能并非特定于所有VS版本。我目前正在使用VS Professional 2017(15.9.11)。

正如我所说,它确实修复了重定向,但是在调试时肯定有帮助。

答案 5 :(得分:0)

我找到了&#34; TeamConfig文件夹&#34;本地到我的开发机器帮我解决了这个问题。