无法加载类型 'System.ServiceModel.Activation.HttpModule'。

15
我运行了aspnet_regiis.exe,但仍然遇到相同的错误:

无法从程序集'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'中加载类型'System.ServiceModel.Activation.HttpModule'。描述:在当前 Web 请求的执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及代码中的原始位置。异常详细信息:System.TypeLoadException: 无法从程序集'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'中加载类型'System.ServiceModel.Activation.HttpModule'。


你能提供一下 .net / asp.net 和 iis 版本的信息吗? - Stefano Altieri
8个回答

21
如果你使用的是 Windows 8,这种方法将不起作用。微软不允许你运行此命令,并告诉你:

此选项在此操作系统版本上不受支持。管理员应该使用“打开/关闭 Windows 功能”对话框、服务器管理工具或 dism.exe 命令行工具安装/卸载带有 IIS8 的 ASP.NET 4.5。

原因可在此链接上找到:http://support.microsoft.com/kb/2736284
我找到的解决方法发布在此链接中,由 Neha 回答:System.ServiceModel.Activation.HttpModule error
“到处都提到重新注册aspNet的问题,需要使用aspnet_regiis.exe。但这对我没有用。虽然这是一个有效的解决方案(如此巧妙地解释在这里),但它不能在Windows 8上运行。对于Windows 8,您需要启用“ .Net Framework 3.5”和“ .Net Framework 4.5高级服务”下的所有内容。”

这解决了我在Windows Server 2012上的问题。请注意,我必须仔细确保所有3.5和4.5项目都被选中...要看得仔细,因为其中一些东西很容易错过。更奇怪的是,因为我的WCF项目是针对4.0编译的。 - P.Brian.Mackey

16

我在将IIS服务器升级到.NET 4.5.1(之前安装了.NET 4.0)后遇到了相同的错误。 在我的情况下,使用参数-iru运行aspnet_regiis解决了问题。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -iru

注意:64位系统 上您应该使用

%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis -iru

注:

  • .NET 4.0及以上版本(如4.5.1)都会安装到v.4.0.30319中,这与早期版本不同(您将找不到v4.5文件夹)。 要获取已安装的.NET框架版本,请参见答案。

  • 此错误的原因在此处有描述。如果您想手动检查,我引用了来自该文章的以下内容:

此问题是由于针对Windows进程激活服务(WAS)的Applicationhost.config文件定义了以下部分,并且此部分与.NET Framework 4.0不兼容:

<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />

应将此部分定义为以下内容(注意preCondition):

<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, 
System.ServiceModel, Version=3.0.0.0, Culture=neutral, 
PublicKeyToken=b77a5c561934e089" 
preCondition="managedHandler,runtimeVersionv2.0" />

注意:您可以在以下位置找到Applicationhost.config文件:%windir%\system32\inetsrv\config


1
在安装了.NET Framework 4.5.2后,在Windows Server 2008 R2上遇到了相同的错误。运行aspnet_regiis.exe /iru解决了我的问题。请注意,正如您所引用的Microsoft文章中所述,在64位计算机上,应从64位文件夹%windir%\Microsoft.NET\Framework64\v4.0.30319进行注册。 - DavidRR
@DavidRR:谢谢提醒,我已经更新了答案。 - Matt
2
我不得不更改Applicationhost.config才能在Windows Server 2016上使其正常工作。 - Tobias

2

请前往以下目录查找applicationhost.config文件:

C:\Windows\system32\inetsrv\config

下面将定义以下部分:

<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />

以上定义与.NET框架4.0不兼容,您可以通过将上述部分替换为以下内容来解决此问题:
<add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />

2
看起来ASP.NET 4.0没有正确地在IIS上注册。请尝试重新注册ASP.NET与IIS吗?您可以尝试为2.0和4.0都执行此操作,以确保所有.NET版本都完成了注册。
使用以下命令为两个版本的ASP.NET在IIS上进行注册:
aspnet_regiis -i
此命令位于两个.NET框架版本文件夹中。 C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 和 C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727

1

我可能有点晚,但希望这篇文章能对大家有所帮助……这是关于IIS 8.0的已知问题。

解决方法是从IIS管理器中删除3.x模块和处理程序。 如果您想在applicationHost.config中保留它们,则可以在应用程序或站点级别删除它们。但是我想从applicationHost.config中将它们删除。按照以下步骤操作:

在IIS管理器中,单击计算机名称节点。在“特性视图”中, 双击“模块”。找到“ServiceModel”并删除它。图像1用于解决IIS 8错误:无法加载类型 ‘System.ServiceModel.Activation.HttpModule’

返回到计算机名称节点的“特性视图”,双击“处理程序映射”。找到“svc-Integrated”并删除它。图像2用于解决IIS 8错误:无法加载类型 ‘System.ServiceModel.Activation.HttpModule’


0
在Windows 2012上,以下操作有效:
由于某种原因,我不知道默认应用程序池被设置为使用4.0: 应用程序池属性 但是,在c:\ windows \ system32 \ inetesrv \ config \ applicationhost.config中没有正确反映:
<add name="DefaultAppPool" enable32BitAppOnWin64="true" />

我不得不将它设置为2.0,然后再次设置为4.0,然后配置文件就正常了,错误也消失了:

<add name="DefaultAppPool" enable32BitAppOnWin64="true" managedRuntimeVersion="v4.0" />

0
为解决此问题,请运行以下命令行:
  • aspnet_regiis.exe /iru Aspnet_regiis.exe 文件可在以下位置之一找到: %windir%\Microsoft.NET\Framework\v4.0.30319 %windir%\Microsoft.NET\Framework64\v4.0.30319(64 位计算机上)

请描述运行该exe文件如何解决问题。 - Lizz

0

为解决此问题,请执行以下命令行:

  1. 关闭应用程序
  2. 在项目文件(Web应用程序)中更改虚拟目录
  3. 现在打开项目文件

它一定会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接