无法加载文件或程序集'System.Web.Http,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一

Qwe*_*rty 1 sitecore nuget-package asp.net-mvc-4

使用Visual Studio 2015和Sitecore 8.0
我使用.Net Framework 4.6.1创建了一个新的MVC项目,复制并引用了Sitecore.kernel.dll和Sitecore.mvc.dll.用sitecore文件替换现有的web.config和global.asax.
在解决方案中添加了一个纯HTML页面并尝试浏览它(来自VS).该页面将打开并显示此错误

无法加载文件或程序集'System.Web.Http,Version = 5.1.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.该系统找不到指定的文件.

此HTML页面尚未发布到Sitecore.我猜,Sitecore.mvc.dll想要MVC 5.1.0,VS项目中的MVC是4.0.

所以,我尝试了以下步骤.

  1. 在包管理器控制台中为MVC 5.1.1运行install package命令,该命令显示错误

无法加载源https://api.nuget.org/v3/index.json的服务索引 .

  1. 删除%AppData%\NuGet\nuget.config并重新启动VS2015

  2. 手动浏览https://api.nuget.org/v3/index.json,但页面未加载 - Secure connection failed.但是这个 - http://api.nuget.org/v3/index.json将承诺下载json.所以,在nuget中将https更改为http,但是它的错误相同 - 无法加载服务索引...

当发生这种情况时,我甚至无法启动我的第一个Sitecore MVC项目.

我用常规VS项目的web.config替换了sitecore web.config,现在我可以浏览该页面了.我将其复制到输出目录设置为不复制,以便它不会被发布.

我是否能够以这种方式继续我的Sitecore开发,将来不会出现任何重大问题.

Ric*_*eal 6

你需要做一些事情来解决这个问题:

应更新您的VS项目以web.config获取Sitecore安装中的文件.您必须拥有该文件的Sitecore版本,否则Sitecore将无法正常运行

您应该为MVC文件添加绑定重定向,使所有内容都使用最新版本:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
        </dependentAssembly>
    </assemblyBinding>
    etc....
</runtime>
Run Code Online (Sandbox Code Playgroud)

确保文件/views夹中的web.config文件包含所有MVC程序集的正确版本.这是我的.net 4.6应用程序:

<configSections>
    <sectionGroup name="system.web.webPages.razor"
        type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host"
        type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        requirePermission="false" />
    <section name="pages"
        type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        requirePermission="false" />
    </sectionGroup>
</configSections>

<system.web.webPages.razor>
    <host
        factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Optimization" />
            <add namespace="System.Web.Routing" />
            <add namespace="Sitecore.Mvc" />
            <add namespace="Sitecore" />
        </namespaces>
    </pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)

完成后,您的Sitecore安装应该正确地获取最新的MVC二进制文件.