无法加载文件或程序集'System.Web.Helpers',在IIS 8上出现错误。

41

我有一个MVC4 Web应用程序,在Visual Studio 2012上使用本地IIS Express服务器运行良好。当我将应用程序发布到运行在Windows 2012上的IIS 8 Web服务器时,初始登录页面显示正确。但是,使用远程调试,我发现当我使用以下行检查凭据时:

if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))

我遇到了下图中显示的错误: System.Web.Helpers error
(来源:usf.edu)

12个回答

25

解决方案 - 将引用复制到本地

  1. 右键单击 System.Web.Helpers 引用,选择属性
  2. 将 "Copy Local" 改为 true
  3. 构建解决方案

1
感谢您的回复。我确实阅读了其他提到这一点的回复,我应该也提到了。但是我在项目引用中没有看到System.Web.Helpers。WebMatrix.WebData被本地复制了。 - Manish
1
在我的情况下,“Copy Local”已经是true了。但由于解决方案中与nuget相关的更改,可能导致iis上的解决方案的bin文件夹不包含任何.dll文件,包括System.Web.Helpers。当我将所有的.dll文件复制到那个文件夹中时,它开始工作了。这可能不是一个解决方案,但如果有人遇到这个问题,请首先检查是否在构建解决方案后将.dll文件加载到bin文件夹中。 - Beginner
太棒了,我在使用Azure Webjobs时遇到了问题,错误就是这个,最终这个解决方案对我起作用了。 - Sharjeel Ahmed

25

听起来好像服务器没有安装MVC。


7
确实,独立的asp.net mvc 4安装程序能够满足我的需求:http://www.microsoft.com/en-us/download/details.aspx?id=30683 - Francisco
1
我将我的项目复制到一个新系统(Windows 10,Visual Studio 2015)中,并出现了这个错误。这个方法解决了我的问题。 - Kai Hartmann

19

System.Web.Helpers.dll 包含在官方 Nuget 包 Microsoft.AspNet.WebPages 中。

安装该包后,引用应该会被修正,并且文件应该会被复制到您的 bin 文件夹中。


16

我通过下载Microsoft Web Platform Installer,搜索MVC并安装“ASP.NET MVC3(Visual Studio 2010)4/11/2011发布”的包,解决了这个问题。在安装之前,请关闭任何Visual Studio实例。


2
这种方法在我的构建服务器上也适用。我使用Web平台安装程序安装了ASP.NET MVC 4,参考错误消失了。 - rsbarro
1
这对我在VS2015中解决此引用问题非常有效。 - Jason L.
这对我在解决VS2017中的引用问题上起了作用。 - AndreFeijo
修复仍然适用于2021年。 - SerenityNow

8
请确保它正在寻找正确的文件版本。我的版本不正确,web.config文件指向比我项目中的版本更高的版本。
在属性中,我注意到版本是2.0.0.0,所以我在web.config文件中将其设置为这个版本。

enter image description here


6

作为现有答案的补充,我遇到了相同的错误,并且无法在程序集中找到参考。我将分享一下帮助我的方法:

从“工具”菜单中打开“程序包管理器”->“程序包管理器控制台”,然后输入以下内容:

PM> Install-Package microsoft-web-helpers

在此之后,System.Web.Helpers将出现在“引用” ->“程序集”下。从那里,“复制本地”属性可以更改为True。


2

我使用“管理 NuGet 包”添加了“Microsoft ASP.NET Razor”。

在添加引用时,出于某种原因,我只有 System.Web.Helpers 的 1.0.0 和 2.0.0 版本,但没有 3.0.0 版本。


已经安装了此程序,但在构建时仍然出现此引用错误:警告 MSB3245:无法解析此引用。找不到程序集“System.Web.Helpers,Version=3.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35,processorArchitecture=MSIL”。请确保磁盘上存在该程序集。如果您的代码需要此引用,则可能会出现编译错误。 - Chris Moschini

2

我正在运行VS 2015预览版,并通过NuGet安装最新版本的MVC解决了这个问题。

以防万一,如果有人仍然遇到这个问题。


1
也许你的Web.config文件有问题。 打开文件,找到标签。 修改MVC的版本。 例如,MVC 3。
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

"Maybe" 不是一个答案。你应该使用注释来解释。当然欢迎来到 StackOverflow! :) - DawidPi

1

我在IIS 8中使用WCF服务时遇到了同样的问题。看看这个解决方案部署ASP.NET,对我有用。


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