缺少#include虚拟链接的处理程序

时间:2012-04-25 14:15:50

标签: parsing asp-classic include

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

主页上散落着各种各样的

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

和类似的,其中有很多/ site /可以组合。

问题是,当您尝试在本地运行其中一个站点时进行调试等,几乎可以保证解析器出错。

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

我不希望每次打开新应用程序时都要将静态内容复制到我的工作站,而且我不想编辑母版页以排除链接,因为有一天我会忘记和部署一些破碎的东西。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

可能你最好的办法是创建一个控制台应用程序或类似的东西来解析你的文件,寻找include语句,根据你的目录结构解析相对路径并做你想做的事情 - 如果不是,写一个空文件存在。然后,您可以通过此解析器运行项目,并至少消除 问题。

此外,您提到了意外部署您编辑的内容以避免此问题的可能性。那么我会假设,如果你要写出这些“虚拟”包含,你不可能意外地部署它们并覆盖好文件吗?