0

我为三个不同的客户端创建了三个不同的解决方案,但这些解决方案适用于具有相同功能、类、方法、分辨率的应用程序,但图像、XML 资源文件和 Web 服务参考除外,它们特定于每个客户端一。

我只想为所有这些应用程序提供一个解决方案,我可以在 VS2010 IDE 中打开它进行版本,没有错误。所以,当我需要构建或发布一个特定的应用程序时,我只需设置我需要的客户端,然后继续构建或发布。

重要的是要考虑 XML 文件名将与类和图像名称相同。不同之处在于内容,但名称始终相同。

我的目的是减少维护许多解决方案的工作量,只使用一种解决方案。

在我的公司,我们很快就会有超过这三个客户,所以我很担心如何维护它。最好的方法是只有一个解决方案,当我需要为新客户端生成新应用程序时,我只需更改/包含一些东西(如一些资源和图像)并编译到新的客户端文件夹。

可能吗?如果有怎么办?

4

2 回答 2

1

一种选择是拥有一个具有以下内容的主解决方案

  • 包含您的实际应用程序和所有共享代码的“模板”项目
  • 适用于所有客户的项目

在为您的客户提供的项目中,您可以拥有指向来自共享项目的文件中的文件的链接。然后,在每个项目中,您可以添加仅特定于它们的文件。

使用这种结构,每当您对模板项目进行更改时,所有客户端项目也会更新,因为它们只有指向模板项目的指针。

这种设置的一个很好的参考是Json.Net Code Base。在那里,他有一个针对所有不同配置的解决方案和项目,但它们都共享相同的文件。

在确保正确命名 xml 文件方面,您可能只想在主应用程序中进行一些检查,以确保它具有所需的所有文件,或者可能在构建过程中添加检查。

于 2013-01-30T21:27:56.873 回答
0

有很多方法可以解决这个问题。

我最喜欢的是运行某种预构建步骤——可能在 Visual Studio 之外——它只是在构建之前用正确的文件替换文件。这将很容易实现自动化并且易于扩展。

如果您要为三个以上的客户进行构建,那么我认为您应该考虑从 Visual Studio 构建切换到其他一些自动构建系统 - 例如从命令行或从 TeamCity 或 CruiseControl 之类的 MSBuild。如果您的构建是自动化的(并且健壮的),您会发现更容易扩展


如果您不喜欢文件的想法,那么您可以尝试很多其他的方法:

  • 您可以尝试执行与上述类似的步骤,但可以在 VS 中使用预构建步骤执行此操作。
  • 您可以使用 .csproj 文件中的条件节点通过项目配置切换文件
  • 您可以考虑将特定于客户端的资源转移到另一个程序集中 - 然后在运行时使用 GetResourceStream (或类似的)来提取资源。

但是这些对我来说都没有那么好!

于 2013-01-30T22:39:51.940 回答