Предварительная компиляция Razor Views в библиотеке классов

Используя VS2015 и MVC 5.2.3, я пытаюсь переместить области функциональности, включая представления Razor, в библиотеки классов, чтобы я мог делиться ими между несколькими проектами.

Я использую средство MvcBuildViews, как обычно описано, и настраиваю его следующим образом, так как оно часто выявляет опечатки перед публикацией:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
        <AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>

Это прекрасно работает с самим основным проектом, но у меня возникли проблемы с его работой с библиотеками. Вместо этого я получаю следующую ошибку компилятора:

web.config(41): ошибка ASPCONFIG: не удалось загрузить файл или сборку «System.Web.Mvc, версия = 5.2.3.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35» или одну из ее зависимостей. Система не может найти указанный файл.

Упомянутый раздел web.config выглядит следующим образом:

<system.web>
    <compilation>
        <assemblies>
            <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />                
        </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.6"/>
</system.web>

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

Я понимаю, что тег AspNetCompiler в csproj является оболочкой для процесса aspnet_compiler.exe, но я не вижу различий в среде компиляции в библиотеке классов по сравнению с основным проектом.

Можно ли в этом теге передать компилятору конкретную папку поиска сборки? - поскольку сборка System.Web.Mvc.dll определенно существует в папке bin\Release проекта библиотеки классов. Или есть лучший подход?

Подробная информация о внутренних процессах aspnet_compiler.exe скудна, и, похоже, он не имеет подробного режима диагностики.

Как мне поступить с этим?


person stephen    schedule 25.02.2019    source источник
comment
В качестве альтернативы вы можете использовать RazorEngine для преобразования вашего представления в HtmlString и совместного использования HTML между проектами, см. этот ответ для получения дополнительной информации.   -  person Hooman Bahreini    schedule 26.02.2019
comment
Спасибо, Hooman, я просмотрел RazorEngine, но я пытаюсь свести к минимуму сторонние зависимости в проектах, и я чувствую, что это должно работать изначально. Если MvcBuildViews работает в основных проектах, то почему не в библиотеках?   -  person stephen    schedule 26.02.2019