4

我管理一个非常大的网络/数据库应用程序(目前大约 80 个 ASPX 页面)。这在我们的客户之间共享(例如,他们都通过相同的 URL 访问相同的应用程序)。

我还将单个 ASPX 页面上传到实时服务器,而不是编译版本,以允许我在不同时间处理站点的不​​同部分。

我现在面临一个挑战,新客户希望自己在自己的服务器上托管应用程序。这将涉及在上传之前修改大约 3 个页面。

我以前从来没有遇到过这个挑战,但是有没有办法避免仅仅为了那些微小的变化而复制整个应用程序?以后我需要管理原始应用,加上客户自己托管的版本,但不一定要每个新版本上传两次,还要管理修改后的3个页面的不同版本。

4

2 回答 2

2

我以前做过这种事情,我认为只有 3 页一个全新的“叉子”是矫枉过正的。并不是说我是说“不要使用源代码控制”。(你最好使用某种源代码控制)但是对于三个页面,我认为最简单的解决方案是一些简单的重定向逻辑。

我假设当这些特定用户登录到您的系统时,您有某种“全局变量”,表明他们是相关公司的成员。在您尝试替换的 3 个页面中,只需放置类似if (companyName == "specialCompany") Server.Transfer("specialCompanyDirectory/anotherPage.aspx"); 或其他内容。出于理智考虑,我建议将所有三个被替换的页面都放在一个单独的目录中。然后在“specialCompanyDirectory”中每个页面的顶部确保检查当前用户确实是“specialCompany”的成员。

根据您的应用程序和页面的逻辑,您可能需要执行重定向以外的操作;就像使用单独的 Web 用户控件一样。

无论哪种方式,为 3 页更改创建一个完全独立的应用程序似乎都是错误的方法。如果您要更改一大堆页面,请查看 TFS 分支、SVN 分支或其他软件。

编辑:

通常,分支被设计为保持独立,直到您最终合并它们。如果你让它们永远不同,而各个分支正在发展,它们彼此之间没有任何关系;因此,如果您要对“主”分支中的这 3 个页面之一进行小幅更改,那么您也必须在“specialCompany”分支中再次进行更改。

我建议你使用我上面最初描述的方法,因为你的编辑很少。我建议您使用某种全局方法来决定何时使用特殊方法,以便您可以跟踪在哪里进行这些特殊更改。例如,在 App_Code 中的某处添加一个方法,如下所示:

public String companySpecialMethod()
    {
        if (Request.ServerVariables["HTTP_HOST"].ToString().ToLower().Contains("somespecialdomain.com"))
        {
            return "somespecialdomain";
        }
        else if (Request.ServerVariables["HTTP_HOST"].ToString().ToLower().Contains("anotherspecialdomain.com"))
        {
            return "anotherspecialdomain";
        }
        else
            return "";
    }

然后在您的代码中,您可以执行以下操作:

if (companySpecialMethod() == "")
{
    //run a normal method
    normalMethod();
}
else if (companySpecialMethod() == "somespecialdomain")
{
    //run a special method, just for somespecialdomain
    somespecialdomainMethod();
}
else if (companySpecialMethod() == "anotherspecialdomain")
{
    //run a special method, just for anotherspecialdomain
    anotherspecialdomainMethod();
}

然而

如果你真的想为这个解决方案使用源代码控制(如果你认为你会做很多这种类型的事情,这可能是最好的主意),那么你可以试试这个:

在此处输入图像描述

假设您希望所有代码都在一个存储库中:您基本上创建一个存储库(主存储库),其中仅包含所有项目中完全相同的代码。这样,您的所有基本代码都将保持最新;您在正常项目中所做的任何更改也将传播到您的特殊项目。

(您不必在下一部分执行此操作但最佳实践是将所有代码放在某种源代码控制中)然后为每个“特殊”目录创建一个新存储库。

此方法将确保您将所有代码都保存在源代码管理中,并且您不必复制对“基本”代码的更改。

至于源代码管理软件,我更喜欢SVN,但这只是我。:) TFS 也是一个很好的产品,它的工作原理与 SVN 类似。

于 2012-12-04T18:29:51.137 回答
1

首先,80页很小。

其次,源代码控制将是一件好事。

有 MSDN 许可证吗?最多五个用户可以免费访问 TFS 服务。

于 2012-11-29T11:52:18.793 回答