0

静的Webサイトのさまざまな部分にリンクする多くの従来のASPおよびVB/ASP.Netアプリケーションを維持する必要があります。

マスターページにはさまざまなものが散らばっています

<!-- #include virtual="/site/footer.something" -->

同様に、/site/の組み合わせは多数あります。

問題は、デバッグ中など、これらのサイトの1つをローカルで実行しようとすると、パーサーエラーが発生することがほぼ確実に発生することです。

私がやりたいのは、ジェネリックハンドラーを考え出すことです。これにより、存在しない#includeファイルに対して空白のファイルを挿入することができます。ブラウザで機能するURL書き換えルールを設定しようとしましたが(空のhtmlファイルにリダイレクトするだけです)、ASPパーサーはパーサーエラーを生成するため、Webリクエストとして含まれていないと思います。

新しいアプリを開くたびに静的コンテンツをワークステーションにコピーする必要はありません。また、ある日、壊れたものを忘れてデプロイするため、マスターページを編集してリンクを除外したくありません。 。

したがって、問題は、これらの宣言のデフォルトファイルを提供する方法、または他の方法があるかどうかです。

編集:この問題に対する別の修正を検討します。特定の場所にある不足しているファイルの要求を取得し、事前定義されたコンテンツを返すことができる、ある種のファイルシステムハンドラーを挿入する方法はありますか?ええ、私はそれが本当に風変わりな方向であり、おそらく実際には非常に悪い考えであることを知っていますが、これは現在のオフィスではかなり苛立たしい問題です。苛立たしいのは、IISでSSIが無効になっている場合でも、ASPプロセッサが#includeディレクティブを尊重することです。それを無効にする方法、または生成されたクラスの動作をオーバーライドする方法はありますか?

4

1 に答える 1

2

発生する問題は、コードが実行される前にインクルードが処理されることです。サーバーは、スクリプトで参照されているすべてのリソースを収集し、コードをコンパイルして実行します。コードが実行されるまでに、欠落しているインクルードは既にコンパイラ エラーをスローしています。

さらに、あなたが求めていることは、潜在的に他の問題に遭遇する可能性があります. 多くの場合、インクルードには、他のスクリプトが依存するコード (プロシージャ、定数、変数宣言など) が含まれています。そのため、不足しているインクルードを空のファイルに置き換えたとしても、インクルード スクリプトがそのインクルードに特定のコードが含まれていると想定している場合は、他のパーサー エラーが発生する可能性があります。

おそらく最善の策は、インクルードステートメントを探してファイルを解析し、ディレクトリ構造に基づいて相対パスを解決し、必要なことを行うコンソールアプリまたは同様のものを作成することです-存在しない場合は空のファイルを書き込みます. その後、このパーサーを介してプロジェクトを実行し、少なくともその問題を解消できます。

さらに、この問題を回避するために編集したものを誤って展開する可能性について言及しています。これらの「ダミー」インクルードを書き出す場合、誤ってそれらを展開して適切なファイルを上書きする可能性はないと思いますか?

于 2012-04-25T15:36:20.710 に答える