有条件地编译整个名称空间-C#

有条件地编译整个名称空间-C#,c#,namespaces,compilation,conditional,C#,Namespaces,Compilation,Conditional,我想知道是否有一种方法可以在C#中有条件地编译整个名称空间。还是我必须用预处理器指令来明确地修饰名称空间中的每个源文件以排除它?在我的应用程序的子版本中,各种名称空间中的代码根本不是必需的,我希望将其排除在外 提前谢谢 如果名称空间位于不包含任何其他内容的单独程序集中,则可以对特定子版本使用Configuration Manager并取消选中“Build”复选框 如果程序集中有其他类,尽管它们显然不会被构建或包含,那么唯一的方法就是用预处理器声明进行修饰。您需要在每个文件中放入条件编译指令。无法

我想知道是否有一种方法可以在C#中有条件地编译整个名称空间。还是我必须用预处理器指令来明确地修饰名称空间中的每个源文件以排除它?在我的应用程序的子版本中,各种名称空间中的代码根本不是必需的,我希望将其排除在外


提前谢谢

如果名称空间位于不包含任何其他内容的单独程序集中,则可以对特定子版本使用Configuration Manager并取消选中“Build”复选框


如果程序集中有其他类,尽管它们显然不会被构建或包含,那么唯一的方法就是用预处理器声明进行修饰。

您需要在每个文件中放入条件编译指令。无法将整个命名空间标记为条件编译


因此,一个可能的解决方案是将条件代码分解成一个单独的项目(程序集),并仅为需要该程序集的配置提供该程序集;但这取决于条件代码的性质。

您可以通过装饰每个文件来实现,也可以通过选择要包含的文件来实现。MSBuild和csc都有包含路径下所有文件的选项,而且MSBuild还能够根据属性有条件地包含生成项(而不是要求每个配置都有单独的csproj)


但直接装饰文件可能更容易-p

我也有同样的问题,在每个文件中使用指令最终会变得太多;所以我开始在.csproj文件中使用条件标记

例如,如果我需要从构建中排除一些文件,我会将这些文件移动到一个新的分区中

<ItemGroup Condition=" '$(SlimBuild)' != 'true' ">
...
</ItemGroup>
您可能还可以使用通配符来包含将来的文件

<ItemGroup>
  <Compile Include=".\SomePath\*.cs" />
</ItemGroup>

感谢您的进一步澄清。
<ItemGroup>
  <Compile Include=".\SomePath\*.cs" />
</ItemGroup>