2

我有一个 ASP.NET 应用程序,其中包含一些服务器端包含。例如:

<!--#include virtual="/scripts.inc" -->

这些文件不在我的 ASP.NET 网站项目中,因为我的网站从虚拟目录开始:

/路径到我的应用程序

当我选择Build Web Site时,我收到此错误:

无法映射路径“/scripts.inc”

Visual Studio 无法解析在根目录级别定义的这些包含文件。它们在网站项目中不可见。

除了手动注释掉#include 引用之外,还有什么方法可以让我建立网站吗?我可以强制 Visual Studio 忽略这些错误并编译站点吗?

一旦网站被推送到 IIS,就没有问题了,因为所有的#include 文件都已经到位。

注意 - Web 控件不是此应用程序的选项。请假设#include 文件是必需的。此外,我无法移动包含文件,因为它们被其他应用程序使用。

4

4 回答 4

0

尝试使用 ~/ 语法来表示您的应用程序的根。例如

<!--#include virtual="~/scripts.inc" -->
于 2010-06-03T17:11:11.863 回答
0

试试这个:

将 .aspx 文件中的 SSI 指令替换为:

<asp:Literal runat="server" id="scriptsIncLiteral" />

并将其放入您的代码隐藏中:

protected override void OnPreRender(EventArgs e)
{
    string scriptsFile = Request.MapPath(".") + @"..\scripts.inc";
    scriptsIncLiteral.Text = System.IO.File.OpenText(scriptsFile).ReadToEnd();
}

..\如果 scripts.inc 文件位于多个目录之上,您当然必须更改 s 的数量。您还必须确保您的 ASP.NET Web 应用程序可以访问此文件,否则您将获得一个System.UnauthorizedAccessException.

于 2010-06-05T15:10:23.943 回答
0

您可以在 Visual Studio 中设置预构建任务,以便每次在实际构建之前构建项目时复制项目目录中的包含文件。虽然这是一个黑客。

更正确的方法是设置一个包含两个项目的解决方案:一个代表您的 Web 服务器的根目录/与您的项目交互的一组应用程序(通过包含一个共享文件)。另一个将代表您陷入困境的项目。然后,您应该将您的 inc 文件包含(如将文件包含到项目中)到第一个项目中,以便使它们对第二个项目可见并允许它包含(如在 ASPX 中的服务器端包含中)他们。

这是一种更麻烦的方式,但它更接近地反映了您的情况,没有黑客攻击,并且可以为您带来一些额外的功能(例如更容易集成/连接项目的表示)。

于 2010-06-10T08:32:45.347 回答
0

您能否制作包含文件的副本,将它们放在您的开发机器上的解决方案中,然后告诉 VS 不要在构建输出上复制这些文件(构建操作 = 无)?

如果没有,您为什么不直接硬编码到 scripts.inc 文件 ( http://oursite.com/scripts.inc ) 的整个链接。糟糕的工作,但我很确定你不能忽略编译错误(但对警告是肯定的)。

于 2010-06-10T11:06:08.283 回答