有条件地将项目包含在 Visual Studio 解决方案文件中

O. *_*per 6 c# msbuild solution csproj

我正在开发一组相互依赖的库,并且我想生成这些库的多个版本,针对不同的 .NET 框架版本。果然,这是一个常见问题,并且有大量文档介绍.csproj如何以(更常提到的)configuration或(恕我直言更适合)platform变量包含目标框架的选择的方式编写文件。

所有库都采用通用解决方案。

现在,某些库具有仅在较新的 .NET 框架版本上可用的外部依赖项。因此,对于旧版本,构建相应的项目是没有意义的。

如何根据所选项目排除某些项目platform?

我想这个问题的答案一定是以下方法之一,但我找不到有关如何执行此操作的任何具体信息:

  • 或者,它必须是.sln文件中的一个设置,允许我有条件地从解决方案中排除某些项目。从MSDN 文档中,我不清楚文件中的任何项目是否.sln可以标记为仅在给定的一组设置处于活动状态时才构建。
  • 或者,它可能是.csproj文件中的一个设置,允许我有条件地禁用编译(不会使编译失败,而是指示当前不应构建项目)。我的第一个猜测是OutputType设置,但它只允许Library, Exe, Module, 和Winexe; 没有诸如 之类的值None。

当然,有一种解决方法是为.sln每个 .NET Framework 版本创建一个单独的文件,但这听起来很麻烦(因此很容易出错),因为将来任何附加库都必须添加到每个文件中.sln,因此是大量重复的解决方案代码和大量重复的工作。

.sln我更喜欢学习如何在和/或文件的源代码中执行此操作.csproj。