ASP.NET Core 2.0 MVC - 如何从View Compilation中排除某些文件夹?

时间:2017-10-27 15:42:23

标签: asp.net-core asp.net-core-2.0

这里是场景 - 我使用此代码https://iamrufio.com/2017/09/08/rendering-emails-with-razorviewengine-in-net-core-2-0/(感谢作者)将视图呈现给字符串(对于电子邮件)。但是当您发布项目时,所有视图都会被编译,因此我放弃了我的Views / Emails / [templates]。如何在发布时排除某些文件夹被编译(而不是部署)?

我发现了这个https://github.com/aspnet/MvcPrecompilation并使用了MvcRazorExcludeViewFilesFromPublish set to false并且它有效。但是现在我已经部署了所有的视图(他们还在预编译,我想知道吗?)。没什么大不了的,但我只部署了一部分。

2 个答案:

答案 0 :(得分:2)

你可以尝试这个,它适合我。

  • 将MvcRazorCompileOnPublish保留为true(默认值)。
  • 排除文件夹 templates 文件夹,其中包含不应包含的视图 从项目预编译。您可以使用排除来执行此操作 项目上下文菜单选项,或 .csproj 文件中的此代码:
<ItemGroup>
    <Compile Remove="Views\Emails\templates\**" />
    <Content Remove="Views\Emails\templates\**" />
    <EmbeddedResource Remove="Views\Emails\templates\**" />
    <None Remove="Views\Emails\templates\**" />
</ItemGroup>
  • 如果您现在发布项目,则会创建 .PrecompiledViews.dll 没有模板文件夹中的视图。
  • 您可以手动(或使用自定义任务)复制 templates 文件夹以发布根目录。
  • 现在可以在此外部文件夹中找到视图,但您最终可能会收到错误:
  

无法找到包的编译库位置   &#39; Microsoft.Win32.Registry&#39;

要更正此问题,您必须发布文件夹添加参考    带有一些运行时程序集的子文件夹。如果您确实发布了 MvcRazorCompileOnPublish 设置为 false 的项目,则会正常创建 refs 文件夹。所以你必须有一次在没有预编译的情况下发布到另一个文件夹并从那里复制这个refs子文件夹。

答案 1 :(得分:0)

您是否尝试在.csproj文件中添加此内容?

<ItemGroup>
  <Content Update="Views\DoNotPublishThisFolder\**">
    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
  </Content>

  <Content Update="some-file-to-not-publish.xxx">
    <CopyToOutputDirectory>Never</CopyToOutputDirectory>
  </Content>
</ItemGroup>

否则,您可以通过Visual Studio GUI选择文件夹或文件,方法是右键单击并选择属性,然后选择&#34;不要复制&#34;

enter image description here