2010-04-07 60 views
9

我想知道是否有方法在C#中有条件地编译整个命名空间。或者,我是否必须用预处理器指令显式修饰名称空间内的每个源文件以排除它?在我的应用程序的子版本中,各种名称空间中的代码根本就不是必需的,我希望排除它。有条件编译整个命名空间 - C#

在此先感谢!

回答

4

如果你的命名空间是在一个单独的组件,它不包含其他任何你可以使用配置管理器为您的特定的子版本,并取消选中“生成”复选框。

如果你在程序集中有其他的类,虽然它们不会被显式地构建或包含,然后唯一的方法是用预处理器声明进行修饰。

1

您需要把条件编译指令中的每个文件。没有办法将整个名称空间标记为有条件编译。

由于Michael notes in his answer,一个可能的解决方案是将条件代码分解为单独的项目(程序集),并仅将该程序集发送给需要它的配置;但这将取决于条件代码的性质。

+0

感谢你为这个额外的澄清。 – 2010-04-07 03:59:17

1

你可以通过装饰每个文件来做到这一点,或者你可以通过选择要包含的文件来做到这一点。两者的MSBuild和CSC具有用于包括路径下的所有文件的选项,和MSBuild的另外具有有条件地包括建立基于属性的项目(而不是需要每个配置一个单独的csproj)的能力。

但它可能是更容易装点文件直接;-p

1

我有同样的问题,并使用指令中的每个文件最终成为了太多的工作;所以我开始在.csproj文件中使用条件<ItemGroup>标签。

例如,如果我需要从构建中排除某些文件,我将这些文件移动到一个新的<的ItemGroup >节...

<ItemGroup Condition=" '$(SlimBuild)' != 'true' "> 
... 
</ItemGroup> 

...并调用msbuild.exe用匹配属性参数。

MSBuild.exe MyApp.msbuild /p:Configuration=Release /p:SlimBuild=true 

你也可以使用通配符来包含将来的文件。

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