【问题标题】:What effect does the new precompile during publishing option have on MVC4 applications?新的发布期间预编译选项对 MVC4 应用程序有什么影响?
【发布时间】:2013-04-17 06:25:55
【问题描述】:

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

  1. 在发布前删除所有现有文件
  2. 发布期间预编译(带有配置链接)
  3. 从 App_Data 文件夹中排除文件

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

【问题讨论】:

  • 函数的位置可能是新的,但函数本身不是。即使它考虑编译 MVC,WebForms 在 MVC 项目中也是可互操作的。

标签: asp.net-mvc-4 visual-studio-2012


【解决方案1】:

这是一个老问题,但我只是遇到类似的问题,觉得值得分享。

我的错误信息在这篇文章中是一样的。我的项目是 MVC5,使用 Visual Studio 2013 Professional 构建。 Compilation Error: The type 'ASP.global_asax' exists in both DLLs

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

【讨论】:

    【解决方案2】:

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

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

    如果您在 App_Code 中没有任何文件,并且您希望您的网站保持可更新状态,那么这似乎没什么用。

    【讨论】:

    • @Elsimer 你的 .cshtml 文件仍然存在,但是如果它们的内容被预编译,你会发现它们的内容被替换为“这是一个由预编译工具生成的标记文件,不应该被删除!”。
    • 此外,性能增益主要是在初始站点启动时,当为每个页面动态调用编译器时。一旦页面被点击一次(并编译),即使您没有预编译,该编译结果也将用于后续页面加载。
    • 不让您的页面可更新的另一个好处是,VS 会在您的视图中发现类型错误,然后再进入您的实时站点。
    • @Chris 你应该重新考虑你的测试策略,如果没有预编译选项这样的错误不会被发现。
    • @AndersLindén:只需测试您的控制器操作的实际呈现响应。这将调用 Razor,如果它生成异常,则测试将失败。然而,这也是为什么你的观点应该非常对代码轻描淡写。你不能像在类上那样对视图代码进行细粒度的单元测试。它几乎只是通过或失败,即便如此,通过只是意味着它没有产生任何异常,而不是它实际上做了它应该做的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多