使用asp.net core发布视图

13

在一个asp.net core 2.0项目中,我想强制发布Views,因为我需要它们在运行时使用。有什么提示吗?


可能是重复的问题:Asp.net core 2 - Files are not published - Dominik
3个回答

38

编辑你的.csproj文件,添加PreserveCompilationContext为true和MvcRazorCompileOnPublish为false。

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<PreserveCompilationContext>true</PreserveCompilationContext>
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
</PropertyGroup>

那么视图将会被包含在发布中。

编辑:从版本2.1开始,无法使用Razor 类库,而是可以预编译视图。Web 应用程序中的本地视图仍然可以覆盖类库中的视图。在新的方案中,您将删除 PreserveCompilationContext 和 MvcRazorCompileOnPublish 设置,并只使用默认值。这样,应用程序中的所有视图都将预编译,发布输出中不会包含任何 .cshtml 文件。


谢谢,它有效了! 如果可以在发布时保留编译并仍然发布(部分)视图,那就太好了。顺便说一下,我需要一些视图,因为我将它们用作电子邮件模板。 - EricImhauser
我也使用 Razor 引擎来创建我的电子邮件模板,它需要使用 IRazorViewEngine.FindView 来查找视图文件的路径。 - ravetroll
但是这些视图文件在网站上无法工作。当我使用FileZilla上传这些文件时,它们无法正常工作。 - Love Pandey

10

Joe的答案是针对.Net Core 2的。

在.Net Core 3中,如果您在Startup.cs中使用默认的services.AddControllersWithViews(),则需要使用RazorCompileOnPublish。

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <PreserveCompilationContext>true</PreserveCompilationContext>
    <RazorCompileOnPublish>false</RazorCompileOnPublish>
  </PropertyGroup>

另外,如果您需要在Core 3中启用Razor运行时编译,则需要安装“Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation”软件包,然后添加AddRazorRuntimeCompilation。

services.AddControllersWithViews()
        .AddRazorRuntimeCompilation();

这在一定程度上很有帮助。我们正在使用RazorEngine(.net core)包来生成我们服务中的电子邮件,但是当尝试从发布的文件编译模板时,会出现错误。我将其缩小到一个缺少ProjectName.Views.dll文件的问题。如果我删除.csproject更改,则会发布DLL,但不会发布Views文件夹。是否有一种方法可以从我的代码中引用cshtml文件的嵌入式资源,而不是尝试读取文件? - Mathachew
这对我很有用。突然间,在我们的 .net 6.0 项目中,尽管发布一直正常,但在 IIS 上却无法找到任何视图。在 Rider 中本地调试时运行良好。花了 8 小时尝试不同的方法,最终发现了这篇文章,并结合 .csproj 中的 AddRazorRuntimeCompilation() 更改解决了问题。谢谢。 - Varin

0

同时,在发布网站之前,您还需要安装“为IIS安装.Net Core托管捆绑包”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接