11

尝试在当前机器上获取应用程序池时遇到一个奇怪的问题。似乎在安装 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)
4

6 回答 6

10

我强烈建议停止使用 IIS 附带的对 Microsoft.Web.Administration 的本地引用(即使它在 GAC 中)。这是因为它有一个非常具体的版本号(即 7.0.0.0),而且这个版本可能会在未来的 Windows 版本中发生变化,这会造成伤害。

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

于 2015-03-20T19:33:08.863 回答
6

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

请参阅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 团队出于某种原因进行了重定向(除了方便):-)

于 2012-07-19T10:00:35.073 回答
5

我已经知道答案是旧的,但是您是否尝试过指定不同版本的 dll?

一张图值千言万语:

在此处输入图像描述

于 2014-04-04T07:48:15.517 回答
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)。

似乎完整的 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 的收件箱/完整 IIS 配置文件。

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

于 2012-06-26T21:37:02.877 回答
1

我最近才遇到这个问题。在阅读了很多帖子之后,这是最接近于让我知道发生了什么的帖子。虽然在 VS IDE 中运行时我不一定能解决两个版本(7.0.0.0 和 7.9.0.0)之间的冲突,但经过几个小时的努力,我确实找到了一个你可以做的古怪技巧解决 IDE 的自动重定向问题。

在以下示例中:

开发从 inetsrv 目录引用 Microsoft.Web.Administration.dll (7.0.0.0) 并尝试执行以下任何操作并尝试正确连接的应用程序安装。在 IDE 之外运行编译后的代码时,无论它是如何指定的,它总是能正常工作。

  • 服务器管理器 sm = 新的服务器管理器();
  • sm.OpenRemote("本地主机");
  • 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)。

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

于 2019-04-26T17:23:49.923 回答
0

我发现将“TeamConfig 文件夹”本地映射到我的开发机器有助于为我解决这个问题。

于 2018-02-28T04:43:30.027 回答