我想知道是否有办法在C#中有条件地编译整个命名空间。或者我是否必须使用预处理程序指令显式地装饰命名空间中的每个源文件以将其排除?在我的应用程序的子版本中,不需要各种命名空间中的代码,我希望将其排除在外。
提前致谢!
答案 0 :(得分:4)
如果您的命名空间位于不包含任何其他内容的单独程序集中,则可以使用Configuration Manager作为特定子版本,并取消选中“Build”复选框。
如果你在程序集中有其他类,虽然它们不会被明显构建或包含,然后唯一的方法就是用预处理器声明来装饰。
答案 1 :(得分:1)
您需要将条件编译指令放在每个文件中。没有办法将整个命名空间标记为有条件编译。
作为Michael notes in his answer,一种可能的解决方案是将条件代码分解为单独的项目(程序集),并仅为需要它的配置发送该程序集;但这取决于条件代码的性质。
答案 2 :(得分:1)
您可以通过装饰每个文件来完成此操作,也可以通过选择要包含的文件来完成此操作。 MSBuild和csc都有选项可以包含路径下的所有文件,MSBuild还可以根据属性有条件地包含构建项(而不是每个配置需要单独的csproj)。
但直接装饰文件可能更容易;-p
答案 3 :(得分:1)
我遇到了同样的问题,并且在每个文件中使用指令最终变成了太多的工作;所以我开始使用条件< ItemGroup> .csproj文件中的标签。
例如,如果我需要从构建中排除某些文件,我会将这些文件移动到新的< ItemGroup>节...
<ItemGroup Condition=" '$(SlimBuild)' != 'true' ">
...
</ItemGroup>
...并使用匹配的属性参数调用msbuild.exe。
MSBuild.exe MyApp.msbuild /p:Configuration=Release /p:SlimBuild=true
您可能还可以使用通配符来包含将来的文件。
<ItemGroup>
<Compile Include=".\SomePath\*.cs" />
</ItemGroup>