尝试在当前计算机上获取应用程序池时,我遇到了一个奇怪的问题。似乎在安装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)
答案 0 :(得分:8)
我强烈建议您停止使用IIS附带的Microsoft.Web.Administration的本地引用(即使它在GAC中)。这是因为它有一个非常特定的版本号(即7.0.0.0),这个版本可能会在未来的Windows版本中发生变化,而且会受到影响。
相反,请检查nuget包:Microsoft.Web.Administration
(https://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吗?
一张图片胜过千言万语:
答案 3 :(得分:2)
您是如何尝试获取应用程序池的?您使用的是MWH(Microsoft.Web.Administration)API吗?
似乎完整的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外部运行编译后的代码时,无论如何指定,它始终可以正常工作。
这些全部触发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;本地到我的开发机器帮我解决了这个问题。