Razor视图编译不会发布AppName.PrecompiledViews.dll

时间:2018-04-29 05:35:52

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

TLDR; 如果将Microsoft.AspNetCore.Mvc.Razor.ViewCompilation nuget包直接添加到项目而不是另一个包中,则完全框架(net471)上的Razor视图预编译似乎才有效。有没有人知道解决这个问题?

我在完整框架(net471)上运行.net核心2.0 MVC项目。根据{{​​3}},为了在完整框架应用程序上执行视图预编译,您需要包含Microsoft.AspNetCore.Mvc.Razor.ViewCompilation nuget包。如果您已将软件包直接添加到MVC项目,这似乎只能起作用。如果您在另一个nuget包中包含此包,则AppName.PrecompiledViews.dll永远不会被发布。

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

docs

用于参考的包:

<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核心2.0 MVC项目,但是包含了CommonLib nuget包。一切都正常运行,除了在发布时没有AppName.PrecompiledViews.dll:

enter image description here

enter image description here

如果我然后只使用CommonLib包将Microsoft.AspNetCore.Mvc.Razor.ViewCompilation包直接添加到项目中,则PrecompiledViews.dll会显示:

CommonLib nuget package to wrap all dependencies

我正在尝试创建一个公共类库项目,其中包含我的项目(包括.net核心组件)的依赖项,以简化所有常见微项目的升级。有没有人有幸这样做?

1 个答案:

答案 0 :(得分:1)

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

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

我刚刚发现this issue on GitHub表明构建目标已经过渡到顶层项目,但实际上我还没有找到触发此行为的方法。