C# 如何在ASP.NET Core 2.0中预编译视图?
我根据这个设置了我的解决方案。我省略了一些内容,因为根据,默认情况下ASP.NET Core 2.0预编译视图。最后,我将其发布到一个文件夹,该文件夹成功结束,但我的precompiledviews.dll丢失。我尝试在.csproj中显式设置它,但没有成功 编辑:解决方案中的两个项目都只是默认的MVC模板。我打赌您会使用,即使用类似于的命令发布 dotnet发布--配置发布--运行时win-x64 这将生成包含所有依赖项(包括.NET核心二进制文件)的可执行文件 该条载有以下警告: 当前在执行操作时,Razor视图预编译不可用 ASP.NET Core 2.0中的自包含部署(SCD)。该功能将 当2.1版本发布时,可用于SCD 因此,如果要使用预编译的Razor视图,应使用,即使用以下命令发布: dotnet发布--配置发布 在这种情况下,Razor视图是预编译的(默认情况下),您将在其他应用程序二进制文件中找到C# 如何在ASP.NET Core 2.0中预编译视图?,c#,razor,asp.net-core,asp.net-core-mvc,asp.net-core-2.0,C#,Razor,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.0,我根据这个设置了我的解决方案。我省略了一些内容,因为根据,默认情况下ASP.NET Core 2.0预编译视图。最后,我将其发布到一个文件夹,该文件夹成功结束,但我的precompiledviews.dll丢失。我尝试在.csproj中显式设置它,但没有成功 编辑:解决方案中的两个项目都只是默认的MVC模板。我打赌您会使用,即使用类似于的命令发布 dotnet发布--配置发布--运行时win-x64 这将生成包含所有依赖项(包括.NET核心二进制文件)的可执行文件 该条载有以下警告: 当前在执行
YourAppName.PrecompiledViews.dll
更新(用于库项目中的预编译视图)
我最初的回答与通常的ASP.NET核心MVC应用程序有关,但是这个问题特定于包含预编译视图(又称自包含UI)的项目库
ASP.NET Core在发布期间默认预编译视图,但对于库项目中存储的视图,情况并非如此。对这个问题有一个专门的解决办法。这一讨论相当长,但得出的结论是,目前我们仍然需要使用带有定制目标的解决方案进行Razor视图预编译。这基本上与问题所引用的方法相同
我已经使用ChildApplication
和mainmvcapapplication
设置了测试解决方案,并使预编译视图同时适用于构建和发布
以下是用于儿童应用程序的csproj(跳过默认ASP.NET核心MVC项目的部分):
Dean North在中添加了对具有预编译视图的程序集的直接引用
<ItemGroup>
<Reference Include="DashboardExample.PrecompiledViews">
<HintPath>..\DashboardExample\bin\Debug\netcoreapp1.1\DashboardExample.PrecompiledViews.dll</HintPath>
</Reference>
</ItemGroup>
..\DashboardExample\bin\Debug\netcoreapp1.1\DashboardExample.precompiledwiews.dll
这种方法并不完美,因为它使用了使用特定配置构建的程序集(Debug
)。在上面的项目文件中,我使用单独的目标,在构建和发布期间复制ChildApplication.PrecompiledViews.dll
下面是父项目和子项目。我通常只是将它们添加到.csproj
中。不需要复制文件或任何乱七八糟的东西
<PropertyGroup>
<TargetFramework>netcoreapp2.2</...
...
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
<ItemGroup>
...
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.2.0" />
</ItemGroup>
netcoreapp2.2实际上,我是用这个命令发布的。它确实成功地结束了,但仍然没有预编译视图。哇,感谢您提供的示例解决方案。我下载了它,试着发布它。我得到一条错误消息,ChildApplication.PrecompiledViews.dll无法复制,因为它不存在。是的,它并不存在。我遗漏了什么吗?您是否在mvcapapplication
目录下运行dotnet publish-c Release
命令?这对我来说非常好。下面是一个示例,请与您运行的输出进行比较。它正在工作,但奇怪的是,precompiledviews.dll仍然找不到。不应该存在吗?具有预编译视图的程序集的名称将为ChildApplication.PrecompiledViews.dll
和mvcapApplication.PrecompiledViews.dll
。请重新检查,它们应该在那里。您的TargetFramework
是什么?您是否尝试过隐式地将MVCranchorCompileOnPublish
设置为true?@set,它是Core 2.0,是的,我尝试过将MVCranchorCompileOnPublish设置为true。我在下面的文章中看到,将此值设置为true将禁用Razor SDK。如果我想迁移到Razor SDK,视图的预编译是否会在不将MvcRazorCompileOnPublish指定为true的情况下立即进行?
<ItemGroup>
<Reference Include="DashboardExample.PrecompiledViews">
<HintPath>..\DashboardExample\bin\Debug\netcoreapp1.1\DashboardExample.PrecompiledViews.dll</HintPath>
</Reference>
</ItemGroup>
<PropertyGroup>
<TargetFramework>netcoreapp2.2</...
...
<MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
<ItemGroup>
...
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.2.0" />
</ItemGroup>