9

非 HTML を生成するために、asp テンプレート エンジン (部分的なコード ビハインド クラス、動的 <% ... %> ブロックなど) を使用することは可能ですか? コードを動的に生成するためのクリーンで保守可能な方法が必要です。(具体的には、データベースから値を入力した LaTeX コードを生成したいと考えています。)

現在、私のLaTeXテンプレートは、データベースの値でstring.replaceするプレースホルダーを持つリソース文字列です。このソリューションは、メンテナンスとクリーニングが急速に困難になりました。aspx マークアップの動的ブロックを使用したいのですが、a) 出力が HTML でない場合に aspx が適合するかどうか、b) 実際に結果を .tex ファイルにレンダリングする方法がわかりません。 .

生成コード自体は C# .dll にあります。.NET 3.5 を使用しています

これは可能ですか?前もって感謝します。

4

5 に答える 5

7

Visual Studio 2008 ネイティブまたは Visual Studio 2005 SDK に付属する T4 テンプレートを使用すると、必要なものをほとんど生成できます。

次のリンクで詳細を確認できます。

これらのリンクはすべて、あなたの探求の良いスタートになると確信しています。

Visual Studio の外部で T4 テンプレートを生成する場合は、T4 テンプレートを呼び出すカスタム MSBuild タスクがあります (リンク)

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;
}
于 2008-10-22T19:28:16.607 に答える
0

それは確かに可能です。ほとんどのサーバーコントロールは、HTMLマークアップを自動的に発行するため、使用できなくなります。ただし、ページをデータバインドしてデータバインディング式を使用することはできます。Visual Studioは、間違いなく無効なマークアップについて文句を言うでしょう。

次に、出力を取得するために、カッシーニまたはASP.NETパイプラインを介してページを実行する必要があります。私はそれを行うユニットテストハーネスをどこかに持っています、そしてそれは驚くほど簡単です。

ただし、より良いアイデアは、おそらくコードジェネレーターを使用することです。CodeSmithのようなものはうまく機能するはずです。あるいは、Visual Studioに組み込まれているT4でさえ、HTMLに縛られずに、多くの柔軟性を提供します。

于 2008-10-22T19:17:48.297 に答える
0

コード生成については、T4テンプレート機能を調べる必要があります。ASP.Netと同様の構文を使用します。

Scott Hanselmansの投稿を参照してください:http: //www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx

于 2008-10-22T19:19:10.900 に答える
0

はい、できます。標準の.aspxページを作成し、すべてのHTMLを削除して、ページに必要なコンテンツを配置するだけです。次に、<%%>タグを使用して、動的コンテンツをページ内に配置できます。そして、Jason Zが言ったように、Repeaterコントロールを使用して、アイテムのコレクションを反復処理し、「ページ」にリストすることができます。また、HTMLを生成するため、他のすべてのサーバーコントロールを使用することはできませんが、必要に応じて独自のサーバーコントロールやユーザーコントロールを作成することはできます。

于 2008-10-22T19:19:19.853 に答える
0

理由がわかりません。以前の仕事で知っていた誰かが、ASP.NET ページとリピーター コントロールを使用してプロパティを挿入するデータベース ラッパー ジェネレーターを作成しました。次に、ドキュメントの内容をソース ファイルに書き出しました。

ASP.NET がうまくいかないのではないかと心配している場合は、非常に限定的なテスト ケースを作成して、自分の目で確かめることができます。理論をテストして、それがニーズを満たしているかどうかを知らせるのに多くの時間を費やすべきではありません。

于 2008-10-22T19:13:07.557 に答える