是否可以使用asp模板引擎(使用部分代码隐藏类,动态<%...%> 块等)生成非 HTML?我想要一种干净且可维护的方式来动态生成代码。(具体来说,我想生成用数据库中的值填充的 LaTeX 代码。)

目前,我的 LaTeX 模板是带有占位符的资源字符串,我将其替换为数据库值。该解决方案很快变得非常难以维护和清洁。我真的很想使用 aspx 标记中的动态块,但我不确定 a) 当输出不是 HTML 时 aspx 是否会抛出异常,或者 b) 如何将结果实际渲染到 .tex 文件中。

生成代码本身位于 C# .dll 中。我们正在使用 .NET 3.5

这可能吗?提前致谢。

有帮助吗?

解决方案

Visual Studio 2008 本身附带的 T4 模板或 Visual Studio 2005 SDK 附带的 T4 模板,您几乎可以生成您想要的任何内容。

您可以通过以下链接了解更多信息:

我非常确定所有这些链接都是您探索的良好开端。

如果您想在 Visual Studio 之外生成 T4 模板,可以使用自定义 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;
}

其他提示

我不明白为什么不。我在以前的工作中认识的人使用ASP.NET页面创建了一个数据库包装器生成器,并使用转发器控件来插入属性。然后他将文档内容写到源文件中。

如果您担心ASP.NET会出现问题,那么您可以创建一个非常有限的测试用例并亲自查看。不应该花很多时间来测试一个理论,并告诉你它是否符合你的需求。

这当然是可能的。大多数服务器控件都会出局,因为它们会自动发出HTML标记。但是,您可以对页面进行数据绑定并使用数据绑定表达式。 Visual Studio无疑会抱怨无效标记。

然后,您必须通过Cassini或ASP.NET管道运行页面才能获得输出。我在某个地方有一个单元测试工具,这非常容易。

更好的想法可能是使用代码生成器。像CodeSmith这样的东西应该可以很好地工作,甚至Visual Studio内置的 T4 为您提供了很大的灵活性,而不是试图将您绑定到HTML。

对于代码生成,您应该查看T4模板功能。 它使用类似于ASP.Net的语法。

参见Scott Hanselmans Post: http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

是的,你可以。只需创建一个标准的.aspx页面,删除所有HTML并在页面中放置您想要的任何内容。然后你可以使用<!> lt; %% <!> gt;用于在页面中放置动态内容的标记。和Jason Z说的一样,你可以使用Repeater控件迭代项目集合,在<!> quot; page <!>中列出。此外,由于它们生成HTML,您将无法使用所有其他服务器控件,但您仍可以根据需要创建自己的服务器控件和/或用户控件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top