Asp.net core 使用asp.net core发布视图

Asp.net core 使用asp.net core发布视图,asp.net-core,Asp.net Core,在asp.net core 2.0项目中,我想强制发布视图,因为我在运行时需要它们。 有什么线索吗?编辑您的.csproj文件,并将PreserveCompirationContext添加为true,将MvcRazorCompileOnPublish添加为false <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <PreserveCompilationContext>

在asp.net core 2.0项目中,我想强制发布视图,因为我在运行时需要它们。
有什么线索吗?

编辑您的.csproj文件,并将PreserveCompirationContext添加为true,将MvcRazorCompileOnPublish添加为false

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

netcoreapp2.0
真的
假的
然后视图将包含在发布中


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

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

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

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

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

谢谢,它可以工作!!我会很高兴在发布时离开编译,并且仍然发布(一些)视图。仅供参考,我需要一些视图,因为我将它们用作电子邮件模板。我还将Razor引擎用于我的电子邮件模板,它要求使用IRazorViewEngine.FindView找到这些视图,而IRazorViewEngine.FindView需要一个文件路径来定位视图。但这些视图文件在网站在线上不起作用。当我使用filezilla上传这些文件时,它不起作用。可能的重复在某种程度上是有帮助的。我正在使用RazorEngine(.net core)包在我们的服务中生成电子邮件,但是当试图从发布的文件编译模板时,出现了一个错误。我将其缩小到缺少ProjectName.Views.dll文件。如果删除.csproject更改,则会发布DLL,但不会发布视图文件夹。有没有一种方法可以从我的代码中引用cshtml文件的嵌入资源,而不是尝试读取文件?
services.AddControllersWithViews()
        .AddRazorRuntimeCompilation();