【问题标题】:Razor view compilation does not publish AppName.PrecompiledViews.dllRazor 视图编译不发布 AppName.PrecompiledViews.dll
【发布时间】:2018-04-30 03:28:08
【问题描述】:

TLDR; 仅当将 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation nuget 包直接添加到项目中而不是在另一个包中时,完整框架 (net471) 上的 Razor 视图预编译似乎才有效。有谁知道解决这个问题的方法吗?

我有一个在完整框架 (net471) 上运行的 .net core 2.0 MVC 项目。根据docs,为了在完整的框架应用程序上执行视图预编译,您需要包含 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation nuget 包。这似乎仅在您将包直接添加到 MVC 项目时才有效。如果您在另一个 nuget 包中有此包,则 AppName.PrecompiledViews.dll 永远不会发布。

我使用以下软件包在 net471 上运行的 Visual Studio 中启动了一个新的 .net 核心 MVC 项目。一切正常,dll 显示并且性能表明视图编译正确:

供参考的包:

<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Session" Version="2.0.2" />
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.2" />
<PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.0.1" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="2.0.1" />
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.2" />

接下来我创建了一个类库,添加了相同的包并将其捆绑在一个 nuget 包中(我们称之为 CommonLib)。我创建了第二个在 net471 上运行的 .net core 2.0 MVC 项目,但包含了 CommonLib nuget 包。一切正常运行,除了发布时没有 AppName.PrecompiledViews.dll:

如果我随后将 Microsoft.AspNetCore.Mvc.Razor.ViewCompilation 包直接添加到带有 CommonLib 包的项目中,则会显示 PrecompiledViews.dll:

我正在尝试创建一个通用类库项目,其中包含我的项目(包括 .net 核心组件)的依赖项,以简化所有通用微型项目的升级。有没有人幸运地做到这一点?

【问题讨论】:

标签: asp.net-core asp.net-core-mvc razor-pages


【解决方案1】:

为了运行 Razor 视图编译,您需要包含特殊的 MSBuild 目标,这些目标将作为项目构建过程的一部分自动运行。这些任务包含在Microsoft.AspNetCore.Razor.ViewCompilation 包中。

目前,使用 NuGet 公开其他 MSBuild 目标的唯一方法是显式引用包。构建目标没有传递属性,因此您必须始终显式引用包才能为您的项目激活这些目标。


我刚刚找到this issue on GitHub,这表明构建目标已经传递到顶级项目,但实际上我还没有找到触发这种行为的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多