【问题标题】:How to consolidate ASP.NET master pages across applications?如何跨应用程序整合 ASP.NET 母版页?
【发布时间】:2009-01-23 21:38:02
【问题描述】:

第一次在这些板上提出问题,希望我能得到一些帮助,这里是:

我正在为我的客户启动 .NET 实践。我们目前有 5 个小型 .NET 应用程序,其中一些已投入生产。它们大多是带有一些数据输入/业务逻辑功能的小型报表。这些应用程序中的每一个当前都使用相同的母版页。

我的意思是每个应用程序中都有相同母版页的副本。它们都是基本的网站->WCF->BL->DB 分层应用程序。因此,我有 4 个相同母版页的副本,当我对其进行更改时,我必须对其进行更改。

客户不想将所有这些整合到一个解决方案中。他们喜欢跨站点的应用程序分离。我只是不想继续处理公共元素的多次更新的麻烦(这些应用程序中会有更多更新)。

代码全部存储在团队基础服务器中。我们也不想将母版页编译成 .dll 并部署它。

任何人都可以就如何在我的多个应用程序中维护这些通用文件(master、.css 等)的单个副本提出一些建议。

提前致谢

【问题讨论】:

    标签: asp.net master-pages


    【解决方案1】:

    您可能想查看Sharing Master Pages in Visual Studio

    如果这没有帮助,那么您可以尝试在 Visual Studio 中使用 Build Events。我会选择其中一个项目作为我的“主项目”,并且只编辑该项目的母版页。当您构建项目时,它会运行一个命令,将该母版页(如果已更改)复制到您设置的位置。

    【讨论】:

    • 感谢您关于使用 Build Events 的建议,今天对我有帮助。
    【解决方案2】:

    客户不想 将所有这些整合到一个单一的 解决方案。他们喜欢分开 跨站点的应用程序。我只是不 想继续处理 常见的多次更新的麻烦 元素(会有很多 更多这些应用程序)。

    代码全部存储在团队中 基础服务器。我们也不想 将母版页编译成 dll 并部署它。

    你消除了那里仅有的两个真正的选择。母版页中的全部内容是什么?是否可以将 HTML UI 元素提取到单个模板或一系列模板 HTML 文件中,然后将它们动态导入到母版页中?然后,您可以将通用 HTML 重新定位到任意 URL,并让每个应用程序的母版页动态地将其拉入。

    编辑:我撒谎了。您也可以使用像 Sharepoint 这样的 VirtualPathProvider 将母版页存储在数据库或其他目录中,但请注意 VirtualPathProvider 在 MediumTrust 环境中不起作用。

    见:
    http://msdn.microsoft.com/en-us/library/system.web.hosting.virtualpathprovider.aspx

    【讨论】:

    • 我最终选择了这条路线。我创建了一个虚拟路径提供程序并将我的母版页构建到一个 DLL 中,这正在工作。现在我有一个很大的问题,因为它的母版页通过代码隐藏后期绑定的内容页面会抛出验证/格式化问题,因为它认为它应该是一个支持页面。我的 CNTRL + K、CNTRL + D 在我现在共享母版页的每个页面上都损坏了。这对我和团队来说非常令人沮丧。
    【解决方案3】:

    如果您使用的是 Web 应用程序(编译成 dll)而不是网站,您可以执行以下操作:

    右键单击要存储母版页的文件夹

    选择“添加现有项目...”

    浏览到文件系统上的母版页,然后选择 .master 和 .master.cs 文件。

    然后,不要单击“添加”按钮,而是单击“添加”右侧的小向下箭头,这将弹出一个带有选项的小菜单:“添加”和“添加为链接”

    选择“添加为链接”,这将引用您项目中的文件,同时将其保留在您的开发环境中的原始位置 - 这允许您在任一应用程序中对其进行编辑,同时在其他应用程序中保持最新.

    显然,如果您编辑后面的代码,则需要重新编译其他项目,然后再将更改部署到这些站点。

    这在网站项目中不可用,因为它们依赖文件结构来确定项目中的内容。

    【讨论】:

      【解决方案4】:

      编辑:错过了 css 部分。显然,您将无法提供这些文件,因此这只适用于母版页。

      不知道你的情况,所以

      如果您可以控制应用程序的 DNS / 虚拟目录,则可以使用如下格式:

      c:\inetpub\wwwroot\Application1
      c:\inetpub\wwwroot\Application2
      c:\inetpub\wwwroot\Application3
      c:\inetpub\wwwroot\Application4
      c:\inetpub\wwwroot\Application5
      并将您的母版页放在 c:\inetpub\wwwroot\master.Master,
      c:\inetpub\wwwroot\master.Master.cs,
      c:\inetpub\wwwroot\master.Master.cs.designer

      然后您可以从 /../master.Master 引用母版页的单个副本。我使用预编译的母版页快速进行了此操作,以确保我可以超越我的根目录。您可能需要试一试才能看到。

      【讨论】:

        【解决方案5】:

        我们使用我们的源代码控制在我们需要的所有位置创建指向共享文件的链接。所以如果你在一个地方编辑,你只需要获取最新的,它就会出现在你链接的其他地方。

        【讨论】:

          【解决方案6】:

          我最终选择了 VPP 路线。我创建了一个虚拟路径提供程序并将我的母版页构建到一个 DLL 中,这正在工作。现在我有一个很大的问题,因为它的母版页通过代码隐藏后期绑定的内容页面会抛出验证/格式化问题,因为它认为它应该是一个支持页面。我的 CNTRL + K、CNTRL + D 在我现在共享母版页的每个页面上都损坏了。这对我和团队来说非常令人沮丧

          【讨论】:

            猜你喜欢
            • 2015-12-22
            • 2010-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多