【问题标题】:VS 2012 MVC Web App Publish fails when Precompilation set预编译集时 VS 2012 MVC Web App Publish 失败
【发布时间】:2015-02-12 17:17:07
【问题描述】:

我有一个 MVC 5 Web 应用程序,我希望通过在发布时进行预编译来节省启动时间。但是,当我选择“发布期间预编译”时,出现以下错误:

Error   5082    Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=2780ccd10d57b246' 
or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040).
error ASPRUNTIME    0   0   USIS

Web.Config 对此参考有绑定重定向

  <dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780CCD10D57B246" culture="neutral" />
    <bindingRedirect oldVersion="1.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
  </dependentAssembly>

如果我没有选中此预编译选项,这将构建和部署良好,并且 Web 工作正常且没有问题。我只是无法在选中此预编译选项的情况下发布。

我真的很想让网站只在发布时编译所有视图等,而不是在现场制作站点中重新编译。我正在查看的一些文档表明这是这些功能的提议......但我没有运气。

编辑:我取得了一些成功。我意识到我故意不部署 Web.Config 文件,这样开发人员就不会意外损坏生产环境配置,但似乎预编译构建正在将文件复制到临时位置,并且没有 Web.Config 文件已部署,没有 Web.Config 文件,这意味着没有依赖项翻译。

所以,现在看来,如果我想预编译,我将不得不部署 Web.Config(我已将其构建操作从“内容”设置为“无”,现在我已设置它又回来了。)这意味着我将需要研究 Web.Config 转换等。

谢谢, 格雷格

【问题讨论】:

    标签: visual-studio-2012 razor asp.net-mvc-5 precompile


    【解决方案1】:

    预编译唯一要做的就是编译视图。仅在设置了预编译时才会发生这种情况,这意味着您的某个视图中有某些东西会产生此错误。不过,这有点无关紧要。

    我发现纠正此特定错误的最佳方法是卸载并重新安装有问题的 Nuget 包。

    只需进入包管理器控制台,确保为“默认项目”选择了产生错误的项目,然后运行:

    > Uninstall-Package DotNetOpenAuth.Core -Force
    > Install-Package DotNetOpenAuth.Core
    

    这应该可以解决问题并让您的网站能够正常发布和运行,无论是否进行预编译。

    【讨论】:

    • 对大多数人来说可能是个好建议。我发现通过不发布 Web.config 文件(个人选择),这样的文件从未复制到临时位置,因此没有进行绑定重定向,只需包含此文件即可使预编译成功。
    【解决方案2】:

    解决方案: 事实证明,由于我没有发布 Web.config 文件,因此没有进行绑定重定向。解决办法是把这个文件改回发布状态(Build Action从“None”改成“Content”),然后预编译就成功了。

    对于 MVC 或 ASP.NET 网站在每次访问新页面/视图时运行缓慢的其他人,我建议在发布时尝试使用此预编译功能。它只是隐藏在发布设置(VS 2012)中的文件选项下。我选择预编译,并使站点不可更新以避免动态视图/页面编译。更多信息请参见:What effect does the new precompile during publishing option have on MVC4 applications?

    此外,为了将正确的设置和连接字符串推送到 Live and Test,我开始使用翻译模板“Web.Release.config”和“Web.Debug.config”。这些将仅在部署时交换 Web.config 行。请参阅http://go.microsoft.com/fwlink/?LinkId=125889 了解更多信息。

    【讨论】:

    • 我最近在发布时遇到了另一个预编译问题。我得到了一个 CS1528,因为一个视图在代码行上有“ViewBag.En”。显然,有人开始输入他们从未完成(并签入)的内容,但是当您不尝试预编译视图时,它会构建并且其他页面在本地运行良好......
    • 因此,如果您之前能够发布预编译,但突然开始出现问题,请考虑这样一个事实:发布时预编译的编译错误很可能在您的视图中。可能的罪魁祸首很可能与最后一个预编译项目位于同一文件夹中,或者位于以下文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多