Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2012 VS 2012 MVC Web应用发布在预编译设置时失败_Visual Studio 2012_Razor_Asp.net Mvc 5_Precompile - Fatal编程技术网

Visual studio 2012 VS 2012 MVC Web应用发布在预编译设置时失败

Visual studio 2012 VS 2012 MVC Web应用发布在预编译设置时失败,visual-studio-2012,razor,asp.net-mvc-5,precompile,Visual Studio 2012,Razor,Asp.net Mvc 5,Precompile,我有一个MVC5Web应用程序,我希望通过在发布时预编译来节省启动时间。但是,当我选择“发布期间预编译”时,会出现以下错误: 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'

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

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(我已经将其构建操作从“Content”设置为“None”,现在我又将其设置为“None”),这意味着我需要研究Web.Config转换,等等

谢谢,
Greg

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

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

只需进入Package Manager控制台,确保为“默认项目”选择了生成错误的项目,然后运行:

> Uninstall-Package DotNetOpenAuth.Core -Force
> Install-Package DotNetOpenAuth.Core
这将解决问题,并允许您的站点发布和运行良好,无论是否进行预编译。

解决方案: 事实证明,由于我没有发布Web.config文件,因此没有进行绑定重定向。解决方案是将此文件更改回发布状态(构建操作从“无”更改为“内容”),然后预编译成功

对于MVC或ASP.NET网站在每次访问新页面/视图时运行缓慢的其他人,我建议尝试发布此预编译功能。它只是隐藏在发布设置(VS 2012)的文件选项下。我选择了预编译,并使站点不可更新,以避免动态视图/页面编译。有关详细信息,请参阅:


此外,为了将正确的设置和连接字符串推送到Live和Test,我开始使用翻译模板“Web.Release.config”和“Web.Debug.config”。这些将在仅部署时交换Web.config行。有关更多信息,请参阅。

对于大多数人来说,这是一个很好的建议。我发现,由于没有发布Web.config文件(这是个人的选择),这样的文件从未被复制到临时位置,因此没有进行绑定重定向,并且简化包括这一点使预编译成功。我最近遇到了另一个发布时预编译的问题。我得到的是CS1528,因为视图的代码行上有“ViewBag.En”。很明显,有人开始键入一些他们从未完成(并签入)的内容,但当您不尝试预编译视图时,它的构建和其他页面在本地运行良好…因此,如果您能够发布以前预编译的视图,并且突然它开始出现问题,考虑一下在发布视图中编译编译错误的可能性很可能在您的视图中。可能的罪魁祸首可能与最后一个预编译项位于同一文件夹中,或者位于以下文件夹中。