gpt4 book ai didi

c# - 如何在 ASP.NET Core 2.0 中预编译 View ?

转载 作者:太空狗 更新时间:2023-10-29 20:12:28 26 4
gpt4 key购买 nike

我根据这个 article 设置了我的解决方案.我遗漏了一些东西,因为根据 this , ASP.NET Core 2.0 默认预编译 View 。最后我发布到一个文件夹,成功结束,但是我的precompiledviews.dll不见了。我尝试在 .csproj 中明确设置它,但没有成功。

编辑:解决方案中的两个项目都只是默认的 MVC 模板。

最佳答案

我打赌你会使用 Self-contained deployment ,即使用类似命令发布

dotnet publish --configuration Release --runtime win-x64

这会生成具有所有依赖项(包括 .NET Core 二进制文件)的可执行文件。

Razor view compilation and precompilation文章包含以下警告:

Razor view precompilation is currently unavailable when performing a self-contained deployment (SCD) in ASP.NET Core 2.0. The feature will be available for SCDs when 2.1 releases.

所以如果你想使用预编译的 Razor View ,你应该使用 Framework-dependent deployment ,即使用以下命令发布:

dotnet publish --configuration Release

在这种情况下,Razor View 是预编译的(默认情况下),您会在其他应用程序二进制文件中找到 YourAppName.PrecompiledViews.dll

更新(用于库项目中的预编译 View )

我最初的回答与通常的 ASP.NET Core MVC 应用程序有关,但是这个问题特定于包含预编译 View (即独立 UI)的项目库。

ASP.NET Core 在发布期间默认预编译 View ,但是对于存储在库项目中的 View 不是这种情况。有一个 github issue致力于这个问题。那个讨论相当长,但是它ends up得出的结论是,目前我们仍然需要使用带有自定义目标的解决方案来进行 Razor Views 预编译。它与 article 中描述的方法基本相同由问题引用。

我已经使用 ChildApplication 和主要的 MvcApplication 设置了测试解决方案,并使预编译 View 同时用于构建和发布。

这是 ChildApplication 的 csproj(跳过默认 ASP.NET Core MVC 项目的部分):

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

<!-- ... -->

<Target Name="SetMvcRazorOutputPath">
<PropertyGroup>
<MvcRazorOutputPath>$(OutputPath)</MvcRazorOutputPath>
</PropertyGroup>
</Target>
<Target Name="_MvcRazorPrecompileOnBuild" DependsOnTargets="SetMvcRazorOutputPath;MvcRazorPrecompile" AfterTargets="Build" Condition=" '$(IsCrossTargetingBuild)' != 'true' " />
<Target Name="IncludePrecompiledViewsInPublishOutput" DependsOnTargets="_MvcRazorPrecompileOnBuild" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
<ItemGroup>
<_PrecompiledViewsOutput Include="$(MvcRazorOutputPath)$(MSBuildProjectName).PrecompiledViews.dll" />
<_PrecompiledViewsOutput Include="$(MvcRazorOutputPath)$(MSBuildProjectName).PrecompiledViews.pdb" />
<ContentWithTargetPath Include="@(_PrecompiledViewsOutput->'%(FullPath)')" RelativePath="%(_PrecompiledViewsOutput.Identity)" TargetPath="%(_PrecompiledViewsOutput.Filename)%(_PrecompiledViewsOutput.Extension)" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
</Target>

这是父 MvcApplication 的 csproj:

<!-- ... -->

<ItemGroup>
<ProjectReference Include="..\ChildApplication\ChildApplication.csproj" />
</ItemGroup>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Exec Command="xcopy &quot;$(ProjectDir)\..\ChildApplication\bin\$(ConfigurationName)\netcoreapp2.0\ChildApplication.PrecompiledViews.dll&quot; &quot;$(TargetDir)&quot; /Y /I" />
</Target>

<Target Name="AddPayloadsFolder" AfterTargets="Publish">
<Exec Command="xcopy &quot;$(ProjectDir)\..\ChildApplication\bin\$(ConfigurationName)\netcoreapp2.0\ChildApplication.PrecompiledViews.dll&quot; &quot;$(PublishDir)&quot; /Y /I" />
</Target>

院长北 his original article使用预编译 View 添加对程序集的直接引用。

<ItemGroup>
<Reference Include="DashboardExample.PrecompiledViews">
<HintPath>..\DashboardExample\bin\Debug\netcoreapp1.1\DashboardExample.PrecompiledViews.dll</HintPath>
</Reference>
</ItemGroup>

这种方法并不完美,因为它使用了通过特定配置构建的程序集(此处为Debug)。在我上面的项目文件中,我使用单独的目标在构建和发布期间复制 ChildApplication.PrecompiledViews.dll

这里是 Sample Solution on GitHub包含父项目和子项目。

关于c# - 如何在 ASP.NET Core 2.0 中预编译 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49579800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com