Компиляция Razor View не публикует AppName.PrecompiledViews.dll - PullRequest
0 голосов
/ 29 апреля 2018

TLDR; Предварительная компиляция Razor View в полной структуре (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 никогда не будет опубликован.

Я запустил новый MVC-проект .net в Visual Studio, работающий на net471, со следующими пакетами. Все отлично работает, dll обнаруживается, а производительность показывает, что представления правильно скомпилированы:

enter image description here

Пакеты, используемые для справки:

<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:

enter image description here

CommonLib nuget package to wrap all dependencies

Если я добавлю только пакет Microsoft.AspNetCore.Mvc.Razor.ViewCompilation непосредственно в проект с пакетом CommonLib, появится файл PrecompiledViews.dll:

enter image description here

Я пытаюсь создать общий проект библиотеки классов, который содержит зависимости для моих проектов (включая основные компоненты .net), чтобы упростить обновления для всех распространенных микропроектов. Кому-нибудь повезло с этим?

1 Ответ

0 голосов
/ 29 апреля 2018

Для запуска компиляции Razor View необходимо включить специальные цели MSBuild, которые будут автоматически запускаться как часть процесса сборки вашего проекта. Эти задачи включены в пакет Microsoft.AspNetCore.Razor.ViewCompilation.

В настоящее время единственный способ показать дополнительные цели MSBuild с помощью NuGet - это явная ссылка на пакет. Транзитивное свойство с целями сборки отсутствует, поэтому вам всегда придется явно ссылаться на пакет, чтобы активировать эти цели для вашего проекта.


Я только что обнаружил эту проблему на GitHub , которая предполагает, что цели сборки уже переходят в топовый проект, но на самом деле я не нашел способа вызвать это поведение.

...