经典 ASP Intranet 和新的 ASP.NET 应用程序

Posted

技术标签:

【中文标题】经典 ASP Intranet 和新的 ASP.NET 应用程序【英文标题】:Classic ASP Intranet and New ASP.NET Applications 【发布时间】:2008-10-01 10:00:25 【问题描述】:

我们有一个由数百个页面组成的现有经典 ASP 内部网。它的目录结构是这样的……

/root
    app_1
    app_2
    ...
    img
    js
    style

显然 app_1 等在实际目录结构中有更好的名称。

尽管许多应用程序具有不同的行为,但它们都是同一个 Intranet 的一部分,因此通过 /style 包含样式表、通过 /img 包含图像以及通过 /js 包含客户端脚本,它们具有共同的外观和感觉。

当我想在 ASP.NET 中添加 Intranet 应用程序时(至少对我来说),麻烦就来了。

最终,我想要这个结构:

/root
    app_1
    app_2
    dotnetapp_1
    dotnetapp_2
    ...
    img
    js
    style

在我看来,ASP.NET“应用程序”喜欢将自己与周围的一切分开(这可能只是我对它们的理解)。您在 Visual Studio 中创建了一个新的“项目”,就好像您在我要使用的实际根目录之下有一个新的“根”级别。就像这个新应用程序是一个独立的东西,有自己的图像和风格等等。但是,我希望它成为现有 Intranet 的子部分。

最终我希望能够让我的整个经典 ASP 内部网成为“根”并拥有仍然可以访问 /style 和 /img 的 ASP.NET“子应用程序”,我想对于 ASP.NET 我会有 /masterpages。

我以前试过这个,但是当我将现有的 Intranet 根目录设置为 ASP.NET 项目根目录时(通过 File->打开->网站)。我很乐意使用 VS 2008 SP1(我目前使用优秀的 Notepad++)编辑我现有的经典 ASP 内部网,因为我想更多地使用 VS,但我想这不是绝对必要的。

我还尝试将每个新的 ASP.NET 应用程序单独视为一个应用程序,有效地使 /dotnetapp_1 目录成为应用程序的“根”目录(同样,通过 VS2008 中的文件->打开->网站)。但是,当我尝试引用 /masterpages 时,VS 会抱怨,因为它“属于另一个应用程序”。我想我通过在每个“指向”根 /masterpages 的 ASP.NET 目录中添加一个虚拟目录来解决它,但我不确定 VS 在我这样做时是否能够愉快地提供所见即所得的编辑,而不是制作副本我添加到 Intranet 的每个 ASP.NET 应用程序中的母版页。

我也很可能会访问 .NET MVC 框架,因此请提供有关该框架的任何答案。我希望“项目”对于 MVC 来说不是很重要,而只是一堆文件,它们创建了一个对整体有贡献的应用程序(即 Intranet)。

所以,问题是:我怎样才能最好地将 ASP.NET 应用程序添加到现有的经典 ASP 内部网(我不关心经典 ASP 和 ASP.NET 之间会话共享的技术问题,仅目录和项目的结构布局),并且能够在 Visual Studio 2008 SP1 中编辑这些单独的应用程序,并且通过通用的 Intranet 外观让这些应用程序彼此“相关”*?

请不要只发布“使用 MasterPages”的答案。我很欣赏 MasterPages 是 .NET 在 same 应用程序中的相关页面之间共享样式(并且更有可能)的方法。我明白了。我正在寻找的是尽可能顺利地将 ASP.NET 应用程序添加到现有 Intranet 中的最佳方法,这使得编辑每个应用程序变得简单,并且每个应用程序都可以共享(如果可能的话)Intranet-common 样式。

【问题讨论】:

【参考方案1】:

一种解决方案是使用 IIS 管理器来配置网站(由 Visual Studio 为您的 ASP.NET 应用程序创建)并为每个公共文件夹添加一个虚拟目录,以便(通过虚拟的“虚拟”性质目录)它们将“显示”在与您的 ASP.NET 应用程序相同的根文件夹中。

/root
  app_1
  app_2
  dotnetapp_1
    <virtual>img
    <virtual>js
  ...
  img
  js
  style

如果您需要批量执行此操作,您可能可以编写 IIS 脚本或编辑 XML 文件,而且我确信必须有一种更优雅的方式来执行类似的操作,并且不需要太多的鼠标操作!

【讨论】:

正如我的问题中提到的,这是我过去使用的方法,其中每个 ASP.NET 应用程序目录中的虚拟目录引用 /masterpages。凌乱,更不用说每次都必须这样做有点烦人。我也认为 VS 也不是 100% 快乐。也许这解决方案?【参考方案2】:

由于 ASP.NET 现在是 Microsoft 标准 Web 开发平台,您最好从一个全新的 ASP.NET 网站开始,然后将现有的 ASP 页面和文件夹导入其中。设置并运行后,在 ASP.NET 中添加新功能将是一件轻而易举的事。

Microsoft 了解某些客户可能会在一段时间内混合使用经典 ASP 和 ASP.NET,他们通过使经典 ASP 页面在 ASP.NET 站点中工作来满足这一需求。您正在尝试做的是与此相反的操作(让 ASP.NET 在 ASP 中工作,排序),而您已经遇到了困难。

【讨论】:

谢谢。因此,使用 VS2008,我可以执行“创建新网站”之类的操作并创建基本的 .NET 文件结构。那么我如何“添加”我现有的经典 ASP 以便文件在 VS 中可编辑但不包含在宏大的“编译网站项目”中,并添加新的 ASP.NET 子应用程序?【参考方案3】:

您不能将 asp.net 站点作为虚拟目录运行吗?

www.site.com/dotnetapp/

dotnetapp 哪里是完全独立的虚拟目录?

【讨论】:

【参考方案4】:

几种不同的方法来解决这个问题:

    如果您列出的文件夹结构是所需的 Web 文件夹结构,那么您的任何 ASP.NET 应用程序都可以简单地引用 /root/js/whatever.js 或 ../js/whatever.js,它会到达根目录下已有的文件夹。这是已经提到的虚拟目录解决方案的替代方案。这是一个相当混乱的解决方案,我在当前工作中继承的一些项目就是这样做的。 在以前的工作中,我管理一个混合的经典 ASP/ASP.NET 应用程序几年,我通过在根目录下创建一个 ASP.NET Web 应用程序并将我的所有 ASP 页面移动到其中来做到这一点。您想要制作的任何“子应用程序”都应该只是这个单个项目中的文件夹。 [ASP 页面在 VS2008 中不再有颜色编码,这真的很烦人。]

【讨论】:

以上是关于经典 ASP Intranet 和新的 ASP.NET 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

在VS2010 ASP.NET开发服务器上运行新的MVC3解决方案;会员数据库在哪里?

新手轻松学会MVC

ASP.NET WebAPI 服务对公司内服务的身份验证(Intranet)

使用 ASP.NET MVC 和 Access 的 Intranet 表单

IIS 和 Asp.net MVC Intranet 应用程序的 Windows 身份验证问题

如何在 ASP.NET MVC 3 Intranet 应用程序中重新验证用户身份?