CompilationFailedException при использовании IRazorViewEngine в не Sdk.Web проектах для рендеринга страниц Razor - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь использовать IRazorViewEngine в консольном приложении <Project Sdk="Microsoft.NET.Sdk"> (не <Project Sdk="Microsoft.NET.Sdk.Web">) для отображения страницы .cshtml в памяти. Я зарегистрировал все необходимые зависимости в ServiceProvider. При вызове следующей строки я получаю CompilationFailedException:

_viewEngine.GetView(directory, name, true); 

Исключение:

Microsoft.AspNetCore. Mvc .Razor.Compilation.CompilationFailedException: одна или несколько компиляций произошли ошибки:
kmcajniq.bah (4,20): ошибка CS0400: не удалось найти тип или имя пространства имен «Microsoft» в глобальном пространстве имен (отсутствует ссылка на сборку?)
kmcajniq.bah ( 5,19): ошибка CS0400: не удалось найти тип или имя пространства имен «Microsoft» в глобальном пространстве имен (отсутствует ссылка на сборку?)
kmcajniq.bah (4,82): ошибка CS0518: предопределенный тип «System.Type» не определен или не импортирован
kmcajniq.bah (4,115): ошибка CS0518: предопределенный тип «System.String» не определен или не импортирован
kmcajniq.bah (4,132): ошибка CS0518: предопределенный тип 'System.String' не определено или не импортировано
kmcajniq.bah (5,81): ошибка CS0518: Предопределенный тип 'System.String' не определен или не импортирован

и другие другие отсутствуют System и Microsoft тип es.

Однако , когда я меняю sdk проекта на Microsoft.NET.Sdk.Web, все работает нормально.

Чего не хватает Microsoft.NET.Sdk, что Microsoft.NET.Sdk.Web делает, что рендеринг бритвы работает?

1 Ответ

0 голосов
/ 29 января 2020

Проблема заключалась в том, что RazorViewEngine нужен контекст компиляции для компиляции страниц Razor во время выполнения. По умолчанию для этого параметра в Microsoft.NET.Sdk установлено значение false, а для Microsoft.NET.Sdk.Web - true.

Для решения проблемы необходимо добавить следующее свойство в файл .csproj и установить значение true:

<PropertyGroup>
    <PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>

Дополнительную информацию о различиях можно найти здесь В чем различия между Microsoft. NET .Sdk и Microsoft. NET .Sdk.Web

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...