Использование механизма рендеринга aspx для создания не-HTML

Можно ли использовать механизм создания шаблонов asp (с классом частичного кода программной части, динамическими блоками ‹% ...%> и т. Д.) Для генерации не HTML? Я хочу иметь чистый и удобный способ динамического создания кода. (В частности, я хочу сгенерировать код LaTeX, заполненный значениями из базы данных.)

В настоящее время мои шаблоны LaTeX представляют собой строки ресурсов с заполнителями, которые я заменяю значениями базы данных. Этот раствор быстро стало очень трудно обслуживать и чистить. Я бы очень хотел использовать динамические блоки из разметки aspx, но я не уверен: а) подойдет ли aspx, когда вывод не HTML, или б) как на самом деле отобразить результат в файл .tex .

Сам генерирующий код находится в .dll C #. Мы используем .NET 3.5

Это возможно? Заранее спасибо.


person Wyatt    schedule 22.10.2008    source источник


Ответы (5)


Шаблон T4, который изначально поставляется с Visual Studio 2008 или с пакетом SDK для Visual Studio 2005, позволяет генерировать практически все, что угодно.

Вы можете получить дополнительную информацию по следующим ссылкам:

Я почти уверен, что все эти ссылки - хорошее начало твоих поисков.

Если вы хотите сгенерировать шаблоны T4 вне Visual Studio, существует настраиваемая задача MSBuild для вызова шаблона T4 (ссылка)

Вот пример кода «Выполнить» задачи MSBuild. Щелкните здесь, чтобы просмотреть исходный код:

public override bool Execute()
{
    bool success = false;

    //read in the template:
    string template = File.ReadAllText(this.TemplatePath);

    //replace tags with property and item group values:
    ProjectHelper helper = new ProjectHelper(this);
    template = helper.ResolveProjectItems(template);

    //copy the template to a temp file:
    this._tempFilePath = Path.GetTempFileName();
    File.WriteAllText(this._tempFilePath, template);

    //shell out to the exe:
    ProcessHelper.Run(this, TextTransform.ToolPath, TextTransform.ExeName, string.Format(TextTransform.ArgumentFormat, this.OutputPath, this._tempFilePath));
    success = true;

    return success;
}
person Maxime Rouiller    schedule 22.10.2008
comment
Насколько я понимаю, T4 предназначен для генерации времени разработки. Мне нужно сгенерировать латекс во время выполнения, вроде как asp. Если T4 можно вызвать во время выполнения, он выглядит как правильный инструмент, но я не уверен, что это возможно. - person Wyatt; 22.10.2008
comment
Просто отредактировал это и нашел вам ссылку для его создания из MSBuild вместо Visual Studio. - person Maxime Rouiller; 22.10.2008
comment
T4 является частью Visual Studio, поэтому вы не можете распространять его вместе с приложением для использования во время выполнения. - person Chris Pietschmann; 01.11.2009

Не понимаю, почему бы и нет. Кто-то, кого я знал по предыдущей работе, создал генератор оболочки базы данных, используя страницы ASP.NET и элемент управления повторителем для вставки свойств. Затем он записал содержимое документа в исходный файл.

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

person Jason Z    schedule 22.10.2008

Конечно, это возможно. Большинство серверных элементов управления будут отключены, так как они будут автоматически генерировать разметку HTML. Но вы можете привязать страницу к данным и использовать выражения привязки данных. Visual Studio, несомненно, будет жаловаться на недопустимую разметку.

Затем вам нужно запустить свои страницы через Cassini или конвейер ASP.NET, чтобы получить результат. У меня есть где-то программа модульного тестирования, которая делает это, и это на удивление легко.

Однако лучшей идеей, вероятно, было бы использование генератора кода. Что-то вроде CodeSmith должно работать нормально, или даже Visual Studio, встроенная в T4 дает вам большую гибкость, не пытаясь привязать вас к HTML.

person Mark Brackett    schedule 22.10.2008
comment
Но можно ли отрисовывать шаблоны T4 во время выполнения? - person Wyatt; 22.10.2008

Для генерации кода вам следует взглянуть на функции шаблонов T4. Он использует синтаксис, аналогичный ASP.Net.

См. Сообщение Скотта Хансельманса: http://www.hanselmanration.com/blogextollow noreferrer"> http://www.hanselmanration.com/blogextollow/T4Textual/Blog/Blog/T4TeNSUs/ а>

person Brian Schmitt    schedule 22.10.2008

Да, ты можешь. Просто создайте стандартную страницу .aspx, удалите весь HTML и разместите на странице любой контент, который хотите. Затем вы можете использовать теги ‹%%> для размещения динамического содержимого на странице. И, как сказал Джейсон Зи, вы можете использовать элемент управления Repeater для итерации по коллекциям элементов, перечисляемых на «странице». Кроме того, вы не сможете использовать все другие серверные элементы управления, поскольку они генерируют HTML, но вы все равно можете создать свой собственный серверный элемент управления и / или пользовательские элементы управления по мере необходимости.

person Chris Pietschmann    schedule 22.10.2008