TLDR; предварительная компиляция представления Razor на полной платформе (net471) работает только в том случае, если пакет nuget Microsoft.AspNetCore.Mvc.Razor.ViewCompilation добавлен непосредственно в проект, а не в другой пакет. Кто-нибудь знает способ обойти это?
У меня есть проект .net core 2.0 MVC, работающий на полной платформе (net471). Согласно docs, чтобы выполнить предварительную компиляцию представления в полнофункциональном приложении, необходимо включить пакет nuget Microsoft.AspNetCore.Mvc.Razor.ViewCompilation. Кажется, это работает ТОЛЬКО, если вы добавили пакет непосредственно в проект MVC. Если у вас есть этот пакет в другом пакете nuget, AppName.PrecompiledViews.dll никогда не будет опубликован.
Я развернул новый проект .net core MVC в Visual Studio, работающем на net471, со следующими пакетами. Все отлично работает, 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). Я создал второй проект .net core 2.0 MVC, работающий на net471, но вместо этого включил пакет nuget CommonLib. Все работает нормально, за исключением того, что при публикации нет AppName.PrecompiledViews.dll:
Если затем я добавлю только пакет Microsoft.AspNetCore.Mvc.Razor.ViewCompilation непосредственно в проект с пакетом CommonLib, появится PrecompiledViews.dll:
Я пытаюсь создать общий проект библиотеки классов, который содержит зависимости для моих проектов (включая основные компоненты .net), чтобы упростить обновление для всех распространенных микропроектов. Кому-нибудь повезло с этим?