【问题标题】:Integrate ASP.NET MVC Razor Views inside dll在 dll 中集成 ASP.NET MVC Razor Views
【发布时间】:2018-05-23 14:03:29
【问题描述】:

我有 ASP.NET MVC 5.2.6 项目,总之,当我要发布网站的时候,我不想在Views 文件夹中将 Views 发布为松散的*.cshtml 文件,我想整合dll 中的视图。

我发现了这个question,它正在讨论编译 ASP.NET MVC Razor 视图,我应用了它并且它对我有用,我能够编译 ASP.NET MVC Razor 视图,但我不能摆脱它们,当我删除 *.cshtml 文件时,网站不再工作,这意味着视图不会进入 dll。

这是我删除 Views 文件夹时的错误

这很明显,说他找不到视图。我是否应该编写一些代码来操纵 Razor 搜索引擎以强制它查看 dll 内部?

【问题讨论】:

  • 您发现的问题与编译开发中的视图有关,以便检查其代码是否有效-即类型检查等。您可以打开此功能以增加团队的健壮性检查- ins,但据我所知,它不会将它们编译成 DLL,而且我也不知道可以这样做;这样就不再需要cshtml了
  • 哪个 MVC 版本?
  • 为什么不呢?为什么拥有 cshtml 文件对这个问题不利?
  • 听起来像是不适合目的的安全策略。像@developer 一样,我也不知道要完全删除cshtml 文件。您引用的答案是关于在构建时而不是在运行时(通常是在运行时)进行所有编译检查等。
  • 有些特定文件是您的服务器不会提供的 - CSHTML 文件包含在其中,除非您主动将其关闭。 CSHTML 是代码文件 - 仅用于生成流回客户端的数据您的另一个选择是从控制器返回字符串,并在 DLL 中生成 HTML - 就像 CGI 使用的那样,非常耗时,并且很难调试。

标签: c# asp.net-mvc razorengine


【解决方案1】:

您添加到帖子中的答案的链接在开发过程中就足够了,因此它可以帮助您检测所有编译错误,而不是在执行时即时编译视图。

在开发过程中很少将视图编译成DLL。仅在发布应用程序期间,您需要按视图、按文件夹、按页面和控件或将它们编译到单个 DLL 中。

因此进入您的发布配置文件设置,如下所示:

点击配置链接,之后你会看到这个对话窗口:

在上面的winfow中你可以选择你想要的编译选项。

同样,您不需要在开发过程中将视图编译成 DLL。在此过程中,只需修改 csproj 就足够了。

【讨论】:

  • 是的,我不想在开发中使用它,我希望在发布中使用它。但是哪个选项对我来说可以实现,我尝试了最后一个选项Merge all pages and control outputs to a single assembly,但它不起作用
  • @HakamFostok 在您的案例中,因为您使用的是视图,我认为您需要选择“将所有输出合并到一个单一程序集”。您选择的是 aspx、ascx 等。
【解决方案2】:

这可能就是你要找的东西:https://github.com/RazorGenerator/RazorGenerator

这将为您生成作为单个 dll 的视图文件。

虽然我可能不完全理解或同意这种方法对您的解决方案的推理,因为这不一定提供更好的安全机制,因为可以反编译 dll 并取出源代码。如果您在服务器中具有良好的安全性并关注best practices,那么拥有原始 html 文件可能更易于管理。

【讨论】:

    【解决方案3】:

    经过一番思考,我能想到的唯一方法就是尝试您所要求的,即在代码中动态生成 cshtml 文件。但我之前从未想过尝试这样做。

    我认为真正的答案是改变安全策略,因为它不适合目的。或者使用 ASP.NET MVC 以外的东西。

    毕竟 ASP.NET MVC 最终只是将文件发送到请求它们的客户端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多