我以前做过这种事情,我认为只有 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 类似。