0

我们必须维护许多经典的 ASP 和 VB/ASP.Net 应用程序,这些应用程序链接到静态网站的许多不同部分。

母版页上充斥着各种

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

和类似的,其中 /site/ 可以是许多组合。

问题是,当您进行调试等时,当您尝试在本地运行这些站点之一时,您几乎肯定会遇到解析器错误。

我想要做的是提出一个通用处理程序,这样我就可以为任何不存在的#include 文件插入一个空白文件。我试图设置一个 URL 重写规则,该规则在浏览器中工作(只是重定向到一个空的 html 文件),但我猜 ASP 解析器不包含作为 webrequest,因为它仍然会生成解析器错误。

我不想每次打开新应用程序时都必须将静态内容复制到我的工作站,也不想编辑母版页以排除链接,因为有一天我会忘记并部署一些损坏的东西.

所以问题是,有没有办法为这些声明或其他方法提供默认文件?

编辑:考虑对这个问题进行不同的修复;有没有办法插入某种文件系统处理程序,可以在特定位置获取丢失文件的请求并返回预定义的内容?是的,我知道这是一个非常另类的方向,在实践中可能是一个非常糟糕的主意,但现在这在办公室是一个非常令人沮丧的问题。令人恼火的是,即使 IIS 禁用了 SSI,ASP 处理器仍然尊重#include 指令。有没有办法禁用它,或者有什么方法可以覆盖某种生成的类中的行为?

4

1 回答 1

2

您将遇到的问题是在您的任何代码运行之前处理包含。服务器收集脚本中引用的所有资源,然后编译并运行您的代码。在您的代码运行时,缺少的包含已经引发了编译器错误。

此外,您所问的可能会遇到其他问题。通常包括包含其他脚本所依赖的代码(过程、常量、变量声明等)。因此,即使您要用空文件替换缺少的包含,如果包含脚本期望包含包含特定代码,您仍然可能会遇到其他解析器错误。

可能您最好的选择是制作一个控制台应用程序或类似的东西来解析您的文件以查找包含语句,根据您的目录结构解析相对路径并执行您想要的操作 - 如果它不存在则编写一个空文件。然后,您可以通过此解析器运行您的项目,并至少消除问题。

此外,您提到可能会意外部署您为规避此问题而编辑的内容。我会假设,如果你要写出这些“虚拟”包含,你不可能不小心部署它们并覆盖好文件?

于 2012-04-25T15:36:20.710 回答