【问题标题】:Conditionally skip compilation of C# source files有条件地跳过 C# 源文件的编译
【发布时间】:2014-02-17 12:49:06
【问题描述】:

仅当我的项目处于某些 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 永远不会编译。这是因为当条件总是评估为假。为什么?我做错了什么?

【问题讨论】:

  • 这到底有什么意义?您无需为程序不使用的代码付费。
  • 汉斯,这个(对我来说)的重点是能够在一个不能在发布版本中的项目中保留调试类和表单。

标签: c# build compilation


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    我们不检查哪个项目配置处于活动状态,而是简单地向一些项目配置添加一个 const,然后检查项目 XML 中的 const 值。

    【讨论】:

    • 谢谢,罗宾尼克斯。我稍微修改了你的答案,所以我有......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多