错误Microsoft.Web.Infrastructure,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35

时间:2012-10-01 07:41:13

标签: asp.net

我有一个小型的网络应用程序。哪个工作正常,直到我在我的应用程序中添加了两个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

13 个答案:

答案 0 :(得分:189)

即使在Windows Server上成功安装了.net(4.0或4.5或其他),似乎还没有在GAC中安装 Microsoft.Web.Infrastructure.dll 。在localhost(通常是Windows客户端)上,当安装工具/平台(Visual Studio等)时,它似乎就在GAC中。

作为一种可能的解决方法,请尝试以下方法:

  1. 在程序包管理器控制台中运行以下命令。 (如果您使用的是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.
    
  2. 您会注意到 Microsoft.Web.Infrastructure.dll 现已添加为参考(可在解决方案资源管理器中的项目的references文件夹中看到)

  3. 如果您查看此参考的属性,您会注意到&#34; 复制本地&#34;已设置为&#34; True &#34;默认情况下。

  4. 现在当你&#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>

参考:http://thedeveloperblog.com/

答案 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”。