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
Asp.net mvc 4 新的发布期间预编译选项对MVC4应用程序有什么影响?_Asp.net Mvc 4_Visual Studio 2012 - Fatal编程技术网

Asp.net mvc 4 新的发布期间预编译选项对MVC4应用程序有什么影响?

Asp.net mvc 4 新的发布期间预编译选项对MVC4应用程序有什么影响?,asp.net-mvc-4,visual-studio-2012,Asp.net Mvc 4,Visual Studio 2012,因此,我最近将Visual Studio 2012更新为更新2。请注意,下次我发布应用程序时(在本例中通过文件发布),我注意到有三个新选项: 在发布之前删除所有现有文件 发布期间预编译(带有要配置的链接) 从App_数据文件夹中排除文件 第一个和第三个选项都是不言自明的,但是我找不到任何关于第二个选项的文档,因为它适用于MVC。当我检查它时,网站上生成的文件似乎没有任何变化,我也看不到性能有任何真正的变化。使用ASP.NET预编译器会对您的MVC应用程序产生以下影响: 如果您在App_代码中有

因此,我最近将Visual Studio 2012更新为更新2。请注意,下次我发布应用程序时(在本例中通过文件发布),我注意到有三个新选项:

  • 在发布之前删除所有现有文件
  • 发布期间预编译(带有要配置的链接)
  • 从App_数据文件夹中排除文件

  • 第一个和第三个选项都是不言自明的,但是我找不到任何关于第二个选项的文档,因为它适用于MVC。当我检查它时,网站上生成的文件似乎没有任何变化,我也看不到性能有任何真正的变化。

    使用ASP.NET预编译器会对您的MVC应用程序产生以下影响:

    • 如果您在App_代码中有任何内容,它将在部署之前预编译到DLL中。如果没有预编译,这将由ASP.NET运行时动态执行
    • 如果选择不使页面可更新的选项(即取消选中“高级设置”对话框中的第一个复选框),它也将预编译视图(ASPX和Razor),而不是在运行时动态编译这些视图。默认(选中)设置“允许预编译站点可更新”允许您更新视图内容,而无需重建整个项目

    如果你的App_代码中没有任何文件,并且你希望你的站点保持可更新,那么这似乎没什么作用。

    这是一个老问题,但我只是遇到了类似的问题,觉得有些东西值得分享

    我的错误信息在这篇文章中是相同的。我的项目是MVC5,使用Visual Studio 2013 professional构建。

    在我的例子中,使用precompile选项,bin文件夹中有一个文件App_global.asax.dll,并导致上述错误消息。 首先,我删除服务器上的App_global.asax.dll,重新启动应用程序池,问题就消失了。
    然后我尝试了另一种方法,取消选中precompile and Repubish,重新部署到服务器,问题就不存在了。

    函数的位置可能是新的,但函数本身不是。即使不考虑编译MVC,WebForms也可以在MVC项目中进行互操作。@Elsimer您的.cshtml文件仍将存在,但如果其内容已预编译,您会发现其内容将替换为“这是由预编译工具生成的标记文件,不应删除!”。此外,性能的提高主要发生在初始站点启动时,即为每个页面动态调用编译器时。一旦页面被点击一次(并编译),即使您尚未预编译,该编译结果也将用于后续页面加载。不可更新页面的另一个好处是,VS会在视图中发现类型错误,然后再将其发送到您的实时站点。@Chris如果这些错误在没有预编译的情况下会失效,您应该重新考虑您的测试策略选项。@AndersLindén:只需测试控制器操作的实际呈现响应。这将调用Razor,如果它生成异常,则测试将失败。然而,这也是为什么您的视图应该非常关注代码的原因。您不能像对类那样对视图代码进行细粒度的单元测试。它基本上只是通过或失败,即使如此,通过也只是意味着它没有生成任何异常,而不是说它实际上做了它应该做的事情。