【问题标题】:Visual Studio Build TargetsVisual Studio 构建目标
【发布时间】:2012-09-16 01:02:19
【问题描述】:

我有一个包含图形用户界面的 c# 项目。现在我们得到了第二个硬件后端。我们想要的是在编译项目之前决定后端使用哪个库并更改用于后端处理的类的可能性。 我查看了 msbuild,但我不确定如何使用它来实现它。还有其他或更好的方法吗?

【问题讨论】:

  • 您不想在 UI 中这样做吗?
  • 您是否研究过任何依赖注入(控制反转)框架,例如 StructureMap?它们的全部目的是允许您通过配置更改您正在使用的实现。因此,您无需在编译时担心;你会在运行它之前改变它。我假设您为后端使用了一个通用接口,以便在两者之间轻松切换而无需更改代码。

标签: c# visual-studio msbuild build-process


【解决方案1】:

正如 Mike 所说,依赖注入是正确的答案,在部署时包含适当的 .dll 来解析接口,就像TinyIoC 一样简单。不正确的方法是使用条件参考调整 .csproj,请参阅example,但在您的情况下基于 $(Configuration) 值,因此您可以在 VS 或 CLI 中切换,它会起作用,但会带来痛苦。

【讨论】:

  • 这个想法是没有在您正在编译的计算机上安装所有必需的 dll。作为后端之一是来自 National Instruments 的 DAQmx,它需要大约 1gb,并且将来还会有一些其他后端,所以最好在 linux 下有一个配置脚本之类的东西,您可以在其中选择要编译的后端gui。
  • 我的一个朋友告诉我,我应该提到每个后端都需要安装自己的 sdk。如果您获得大量需要不同 sdk 的后端,这将变得不切实际。因此,最好在编译程序之前决定要为哪个后端分别编译 gui。