C# 单个Visual Studio C项目,多个DLL版本?

C# 单个Visual Studio C项目,多个DLL版本?,c#,visual-studio,dll,msbuild,C#,Visual Studio,Dll,Msbuild,我们有一个主项目,它创建一个DLL,其中FEATURE_1、FEATURE_2和FEATURE_3作为三个条件编译符号,用于启用这些各自的功能 MyLib.dll=>已编译功能_1、功能_2和功能_3 我们现在希望同一个主项目能够提供3种不同的DLL,如下所示: MyLib.1.dll => has only FEATURE_1 compiled in MyLib.2.dll => has only FEATURE_2 compiled in MyLib.3.dll => ha

我们有一个主项目,它创建一个DLL,其中FEATURE_1、FEATURE_2和FEATURE_3作为三个条件编译符号,用于启用这些各自的功能

MyLib.dll=>已编译功能_1、功能_2和功能_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文件中定义,这些文件对它们进行硬编码

是否可以通过命令行传递它们,这样我们仍然可以维护一个主csproj,但只需更改命令行即可在发布配置中构建3种不同的风格,例如:gcc的-D样式?该解决方案还有其他项目,它们被设计为与发布配置一起工作。我也愿意接受任何其他易于使用和维护的技术


我们确实在努力避免在解决方案21中创建伪项目或影响其他项目解决方案中的项目-对于一些非常简单的事情来说,这似乎是一种过激的手段。

我没有对命令行做任何操作,但为了解决类似的问题,我创建了单独的项目来定义框架目标和任何条件编译符号,然后将所有项目文件添加为链接文件。这样,我只需要修改一组源文件,但每个项目都编译成自己的DLL

将文件作为链接文件添加到项目的步骤

在项目上单击鼠标右键,然后单击“添加现有项…”。。。 选择要添加的一个或多个文件。 单击“添加”按钮旁边的箭头,然后单击“添加为链接”,而不是单击“添加”按钮。
我不确定这是否适用于您的案例,但在为不同的.NET framework版本开发库时,它确实为我节省了大量时间。

您是否有可能实现彻底的转变

您可以为每个功能创建单独的项目,然后在打包阶段将较小的部件合并为单个部件,而不是在单个库中定义所有功能,然后禁用其中的一些功能

微软有ILMerge,而iRepack是开源的替代方案


这样,您就不用再进行条件编译了,这太难管理了,而且复杂性也转移到了您的打包脚本上,可以轻松地管理这些脚本并将其签入源代码管理中。

请。也许这是你不需要确定的。我需要所有三个DLL内置版本配置,而不是三个版本1/2/3配置。此解决方案中的其他项目都依赖于版本。我看到,直接从VS中,您需要定义3个配置并运行3次编译。也许使用MSBUILD的某个向导可以帮助您,但如果您准备一个名为RELEASE_FEATURE1的配置(继承自RELEASE)并将其应用于所有项目,然后继续执行每个需要define FEATURE_1的项目并进行设置,最后生成整个解决方案。最后,在名为BIN\RELEASE\u FEATURE1的子文件夹中,您的应用程序只启用了此功能。对另外两个重复上述步骤,则在其各自的子文件夹中有3组不同的程序集。从现在开始,只要切换配置并重建所需的集合,当然,只要从命令行进行构建。从IDE执行此操作需要添加解决方案平台。这是一个可怕的黑客行为,通过使用配置文件总是可以更好地解决这个问题。C不会给您带来与GCC创建一个相同的麻烦,这至少要感谢即时编译器。使用Project+属性和设置。谢谢,但这仍然使我们承担了手动维护多个项目一致性的负担,例如,将文件new.cs添加到主项目中,您现在必须记住将指向new.cs的链接添加到其他“链接”项目中。如果您有具有特定项目属性的资源,情况会更糟!。过度复制整个项目,甚至只是为了指定一个构建标志而链接!