我有一个小型的网络应用程序。哪个工作正常,直到我在我的应用程序中添加了两个genericHandler。
我对http处理程序进行了以下更改
<system.web>
<authentication mode="Forms" >
<forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<compilation debug="true" targetFramework="4.0" />
<httpHandlers>
<!--Code Log Handler-->
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
<add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
<add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
</httpHandlers>
<customErrors mode="Off">
<error statusCode="404" redirect="Templates/PageNotFound.html" />
</customErrors>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<!--Code Log Handler-->
<add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
<!-- SMS SENDER-->
<add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
</handlers>
</system.webServer>
Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
我使用的是asp.net4.0和C#。 我没有使用MVC
在本地主机上工作正常。
但是当我托管发布的代码时,它会给我上述错误。
堆栈追踪: -
[FileNotFoundException:无法加载文件或程序集'Microsoft.Web.Infrastructure,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该系统找不到指定的文件。] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register()+0
[InvalidOperationException:预应用程序启动初始化方法Start类型System.Web.Http.WebHost.PreApplicationStartCode引发异常,并显示以下错误消息:无法加载文件或程序集'Microsoft.Web.Infrastructure,Version = 1.0 .0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该系统找不到指定的文件..] System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods)+11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods()+ 465 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager,IApplicationHost appHost,IConfigMapPathFactory configMapPathFactory,HostingEnvironmentParameters hostingParameters,PolicyLevel policyLeve
[HttpException(0x80004005):预应用程序启动初始化方法Start类型System.Web.Http.WebHost.PreApplicationStartCode引发异常,并显示以下错误消息:无法加载文件或程序集'Microsoft.Web.Infrastructure, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一。该系统找不到指定的文件..] System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+11697760 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)+4866485
答案 0 :(得分:189)
即使在Windows Server上成功安装了.net(4.0或4.5或其他),似乎还没有在GAC中安装 Microsoft.Web.Infrastructure.dll 。在localhost(通常是Windows客户端)上,当安装工具/平台(Visual Studio等)时,它似乎就在GAC中。
作为一种可能的解决方法,请尝试以下方法:
在程序包管理器控制台中运行以下命令。 (如果您使用的是Visual Studio,可通过菜单选项&#34;工具 - &gt;库包管理器 - &gt;包管理器控制台访问:)
PM> Install-Package Microsoft.Web.Infrastructure
如果成功安装,您将看到以下消息。
Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
您会注意到 Microsoft.Web.Infrastructure.dll 现已添加为参考(可在解决方案资源管理器中的项目的references文件夹中看到)
如果您查看此参考的属性,您会注意到&#34; 复制本地&#34;已设置为&#34; True &#34;默认情况下。
现在当你&#34;发布&#34;您的项目 Microsoft.Web.Infrastructure.dll 将被部署。
答案 1 :(得分:19)
我通过WPI安装了MVC4,它帮助了我。
答案 2 :(得分:12)
我遇到了同样的问题。当我尝试接受的答案(rockyb)时,我得到的消息是该软件包已经安装并分配给我的项目。当我检查引用列表时,它没有被引用。
Microsoft.Web.Infrastructure安装在我的解决方案的packages文件夹中。我没有使用NuGet来添加包,而是使用了Add Reference选项。在弹出窗口的左侧,我选择了“浏览”,然后按下窗口底部的“浏览”按钮。我导航到我的解决方案所在的文件夹下的packages文件夹,然后深入到... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40并单击Microsoft.Web.Infrastructure .dll文件。单击“确定”后,包将显示在“参考”列表中。我使用Web Deploy Package选项来部署我的网站,一切正常。
答案 3 :(得分:8)
为什么不手动将Microsoft.Web.Infrastructure.dll文件复制到服务器BIN文件夹。这适用于。我的项目是VS2010网站。
可以找到此文件:
C:\ Program Files(x86)\ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40
只需将其复制并粘贴到BIN文件夹即可。
如果您还没有
,则可能需要在web.config中包含此内容<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
答案 4 :(得分:6)
我发现了问题。我没有添加类(.cs)
文件,而是添加了一个Web API Controller
类,在我的解决方案中添加了一个配置文件。该配置文件正在寻找提到的DLL(Microsoft.Web.Infrastructure 1.0.0.0)。
当我删除该文件,清理应用程序然后发布时,它工作。
答案 5 :(得分:4)
通过Nuget-Package Manager
安装Microsoft.Web.Infrastructure
PM> Install-Package Microsoft.Web.Infrastructure
从Web应用程序的Microsoft.Web.Infrastructure.dll
文件夹中手动复制Nuget-Package
,然后将其粘贴到Web服务器上部署的Web应用程序的bin文件夹中。
包\ Microsoft.Web.Infrastructure.1.0.0.0 \ lib中\ net40 \ Microsoft.Web.Infrastructure.dll
它对我有用。
答案 6 :(得分:3)
Update-Package -reinstall Microsoft.Web.Infrastructure
对我不起作用,因为我一直收到已安装的错误。
我必须导航到packages文件夹中的 Microsoft.Web.Infrastructure.1.0.0.0 文件夹,然后手动删除该文件夹。
执行此操作后,运行Install-Package Microsoft.Web.Infrastructure
安装它。
注意:CopyLocal
自动设置为true。
答案 7 :(得分:0)
我遇到了同样的问题,“Microsoft.Web.Infrastructure.dll”似乎丢失了。我已经尝试了很少的建议并安装了MVC等等,没有任何帮助。解决方案是安装“用于Microsoft .NET的Web服务增强功能(WSE)1.0 SP1”,其中包括Microsoft.Web.Infrastructure.dll。 可从以下位置获取:http://www.microsoft.com/en-gb/download/details.aspx?id=4065
答案 8 :(得分:0)
我遇到了同样的问题。我尝试安装Visual Studio 2010 SP1,但它没有用。
最后我从同事那里得到了Microsoft.Web.Infrastructure.dll。您可以在您的朋友PC中找到项目完美正常工作的dll。尝试将dll搜索到Temp / Temporary ASP.NET Files。使用%temp%转到临时运行窗口。
将dll插入电脑后,只需添加对项目的引用即可。
答案 9 :(得分:0)
重新发布网站为我解决了这个问题。
答案 10 :(得分:0)
面临同样的问题,遗憾的是这里没有任何工作。最后,我遇到了这个链接:https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/
事实证明解决方案有点愚蠢:将microsoft.web.infrastructure dll的copy-local设置为False,然后将其设置为True。
顺便说一句,我认为正在发生的事情是microsoft.web.infrastructure dll有两个版本,一个是预装在GAC中的,另一个是现在的nuget包。我认为一个人正在掩盖另一个,从而导致问题。在我的特定情况下,在我的构建服务器上,我需要将其复制到一个文件夹(然后将该文件夹压缩并发送到部署)。我想系统本地有一个副本,只是想“不,它会没事”
答案 11 :(得分:0)
我有一个仅限文件的网站。将MVC 5添加到webforms应用程序(以net45为目标)。我不得不修改packages.config
package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"
到
package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"
为了在调试模式下在本地盒子上启动(以前有上面描述的错误)。在Windows 7上运行VS 2017 ...通过File&gt;打开打开&gt;网站&gt;文件(选择IIS之外的根目录)。
答案 12 :(得分:0)
升级一堆NuGet软件包后,我遇到了同样的问题。
我尝试了此处所述的各种删除,清洁,树脂交换,但均无济于事。尽管NuGet管理器显示已安装,但这些引用没有Microsoft.Web.Infrastructure。
该问题已通过替换解决:
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
与
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
在packages.config中。罪魁祸首显然是“ net45”。