有条件地跳过C#源文件的编译

时间:2014-01-26 19:19:21

标签: c# build compilation

仅当我的项目处于某些bulid配置时,我才需要包含某些源文件。这可能吗?

我目前已复制DebugRelease,并创建了DebugAltReleaseAlt。我只需要在Debug和Release中编译某些表单,并在备用配置中将它们排除。

我可以将这样的内容写入.csproj文件吗?

 <Compile Include="frmTools.cs" Condition="CONFIG=Debug OR Config=Release"/>

更新

根据MS Build docs,这可能是这样的:

<Choose>
    <When Condition="'$(Configuration)'=='Debug'">
        <ItemGroup>
            <Compile Include="frmTools.cs">
              <SubType>Form</SubType>
            </Compile>
        </ItemGroup>
    </When>
</Choose>

这是中途工作;项目加载完美但frmTools从未编译。因为When条件总是计算为false。为什么?我做错了什么?

2 个答案:

答案 0 :(得分:1)

因此,您可以使用http://msdn.microsoft.com/library/ms164307.aspx

请考虑您需要在文本编辑器中手动编辑项目文件,Visual Studio不允许您通过GUI编辑它。

但是,您仍然可以在Visual Studio中打开项目。

答案 1 :(得分:1)

我终于得到了它。查找DefineConstants数组可以检查是否已定义某个常量var,并相应地包含/排除源文件。

<Choose>
    <When Condition="$(DefineConstants.Contains('MYCONST'))">
        <ItemGroup>
            <Compile Include="frmTools.cs">
              <SubType>Form</SubType>
            </Compile>
        </ItemGroup>
    </When>
</Choose>

我们只需将const添加到一些项目配置中,然后检查Project XML中的const值,而不是检查哪个项目配置处于活动状态。