Шаблон компиляции исключения Razor

#c# #templates #razor #postal

#c# #шаблоны #бритва #почтовый

Вопрос:

Я пытаюсь использовать Postal для отправки электронных писем из службы (не в ASP.NET проект). Я продолжаю получать исключения со следующим сообщением:

 error CS0103: The name 'model' does not exist in the current context
 

Я следую руководству из Postal wiki: https://github.com/andrewdavey/postal/wiki/Postal-in-non-web-scenario

Мой шаблон выглядит следующим образом:

 @model Namespace1.AlertEmailViewModel

From: support@example.com
To: @Model.FirstName @Model.LastName <@Model.Email>
Subject: Alert! @Model.ShortDescription
 

(Рассматриваемый класс модели действительно существует.)

Любая помощь будет признательна. Спасибо!

Комментарии:

1. Используете ли вы текущие версии библиотек mvc / razor?

2. @Marc Gravell Я использовал NuGet для захвата Postal, поэтому я бы предположил, что да, если пакет RazorEngine NuGet обновлен.

3. тем не менее, стоит проверить. В конечном счете, добавление приведения в верхней части может быть таким же простым: var typedModel = (ModelType) Model;

4. @Marc Gravel RazorEngine находится на уровне 2.1.4039.23635. Есть ли что-то новее?

Ответ №1:

Поскольку вы используете Postal в не веб-сценарии, под капотом он использует наш проект RazorEngine. В настоящее время это означает, что он использует версию версии v2.1, которая в настоящее время размещена на NuGet.

@model Синтаксис изначально не поддерживается в версии v2.1, но предстоящий выпуск версии v3 включает эту поддержку, а также другие приятные вещи, такие как макеты, потокобезопасность и т. Д. (https://github.com/Antaris/RazorEngine )

Ответ №2:

В прошлом у меня была эта проблема для проектов, которые были созданы с использованием более ранней версии MVC.

Чтобы устранить это, если я правильно помню, добавьте это в свой файл App.config:

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>
 

Комментарии:

1. Здесь нет web.config; это не ASP.NET проект.

2. Ну, вы используете механизм шаблонов Razor, что означает, что вы ссылаетесь на сборку System.Web.Mvc. Поместите его в свой App.config, если вы не участвуете в веб-проекте..