【发布时间】:2014-04-10 22:33:51
【问题描述】:
我们有一个主项目,它创建一个 DLL,其中 FEATURE_1、FEATURE_2 和 FEATURE_3 作为三个条件编译符号来启用这些各自的功能。
MyLib.dll => 已编译 FEATURE_1、FEATURE_2 和 FEATURE_3
我们现在希望同一个主项目吐出 3 个不同的 DLL,如下所示:
MyLib.1.dll => has only FEATURE_1 compiled in
MyLib.2.dll => has only FEATURE_2 compiled in
MyLib.3.dll => has only FEATURE_3 compiled in
目前我们在 VS2013 中构建,这些编译常量定义在 .csproj 文件中(在 <DefineConstants> </DefineConstants> 标记内),它对它们进行硬编码。
是否可以通过命令行传递它们,这样我们仍然可以维护一个主 csproj,但只需更改命令行(例如:gcc 的-D<buildFlag> 样式)就可以在 RELEASE 配置中构建 3 种不同的风格?该解决方案还有其他项目,它们旨在与 RELEASE 配置一起使用。我也愿意接受任何其他易于使用和维护的技术。
我们确实在努力避免创建伪项目或影响解决方案中的其他项目(解决方案中有 21 个项目)——对于非常简单的事情来说,这似乎是一种矫枉过正/骇人听闻的事情。
【问题讨论】:
-
请look at this answer。可能是你需要的
-
不确定。我需要在 RELEASE 配置中构建的所有三个 DLL,而不是具有三个 RELEASE-1/2/3 配置(此解决方案中的其他项目都依赖于 RELEASE)
-
我明白了,直接从VS你需要定义3个配置并运行编译3次。也许一些 MSBUILD 向导可以帮助你
-
但是,如果您准备一个名为 RELEASE_FEATURE1 的配置继承自 RELEASE 并将其应用于您的所有项目,然后继续每个需要定义 FEATURE_1 的项目并设置它,最后构建整个解决方案。最后,您将在一个名为 BIN\RELEASE_FEATURE1 的子文件夹中拥有您的应用,并且仅启用此功能。对其他两个重复此操作,您在各自的子文件夹中有 3 组不同的程序集。从现在开始,您只需切换配置并重建所需的设置
-
当然,只要你从命令行构建。从 IDE 执行此操作需要添加解决方案平台。这是一个可怕的 hack,总是可以通过使用配置文件更好地解决。 C# 不会像 GCC 那样给您创建一个麻烦,这至少要归功于即时编译器。使用项目 + 属性、设置。
标签: c# visual-studio dll msbuild