同时维护和部署两个版本的应用程序

时间:2012-11-29 18:52:11

标签: c# visual-studio-2010 multiple-versions

我在Visual Studio 2010中有一个C#WinForms应用程序,供两个不同的客户使用。应用程序的基本功能对于每个客户都是相同的,但某些代码行(存储过程的名称,资源,某些行为)在不同版本之间是不同的。到目前为止,我已将应用程序保留在同一个项目中,并在构建/发布时使用预处理程序指令来切换要使用的部署。但是,该项目的范围已经发展到不再可行的程度。

由于共享了这么多代码,我试图避免重复源代码文件。我想知道最好的方法是维护一个需要同时部署不同版本的应用程序。

3 个答案:

答案 0 :(得分:4)

使用接口来定义您的类。拥有一个接口意味着您可以拥有相同接口的多个实现,每个客户端一个。这将要求您分析现有的代码库,并确定代码中可以定义这些接口的逻辑分隔。

然后,您可以根据客户端根据需要加载接口。例如,您可以通过配置执行此操作。根据配置值,您可以加载Implementation1或Implementation2。有许多方法可以完成这一点。您应该阅读依赖注入,控制反转并查看Ninject,Autofac,Unity等工具。

首先考虑如何使用预处理程序指令但看到应用程序的增长情况,实际上可能很难,您需要进行这种重构。请记住,如果您现在不这样做,那么随着您的应用程序变得更加复杂,这种重构将会更加昂贵。

答案 1 :(得分:2)

不同的功能应该是应用程序架构的一部分。如果您需要为不同客户提供不同的功能,请将其抽象化 - 创建一个包装行为的接口,然后在两个不同的程序集中以两种不同的方式实现它。然后(取决于您的部署机制),您可以使用一个DLL或另一个DLL发送您的应用程序。为了避免重新编译,添加引用等,您可以使用依赖注入框架,如Ninject,Castle Windsor,MEF等。如果代码完全不同,那就是“类似插件”的体系结构。

如果你在谈论文字,颜色,基本差异,它们应该不是硬编码而是数据驱动。如果您的应用程序是互联网连接的,它可以在用户登录时下载相应的设置。否则,可以将某些内容指示文本/颜色/行为放在特定于客户的配置文件中。您可以使用配置转换来简化该过程。

答案 2 :(得分:0)

您可以通过使用某种资源,配置或属性文件来区分一些差异。这样,我的意思是您在文件中存储某种值,例如在特定情况下使用的存储过程的名称。然后您的代码从文件中读取名称并运行它。您可以更改文件中的值,而无需为每个部署重建代码。