Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有条件地跳过C#源文件的编译_C#_Build_Compilation - Fatal编程技术网

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

有条件地跳过C#源文件的编译,c#,build,compilation,C#,Build,Compilation,只有当我的项目处于某些bulid配置时,我才需要包含某些源文件。这可能吗 我目前复制了Debug和Release并创建了DebugAlt和ReleaseAlt。我只需要在Debug和Release中编译某些表单,并在备用配置中排除它们 我可以将类似的内容写入.csproj文件吗 <Compile Include="frmTools.cs" Condition="CONFIG=Debug OR Config=Release"/> 更新: 根据《科学》杂志的说法,这应该是有可能的

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

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

我可以将类似的内容写入
.csproj
文件吗

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

更新:

根据《科学》杂志的说法,这应该是有可能的:

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

形式
这是半途而废;项目可以完美地加载,但是
frmTools
从不编译。这是因为When条件的计算结果总是false。为什么?我做错了什么?

因此您可以使用

请考虑在文本编辑器中手动编辑项目文件,VisualStudio不允许您通过GUI编辑此文件。p>


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

我终于可以使用它了。通过查找
DefineConstants
数组,可以检查是否定义了某个常量变量,并相应地包括/排除源文件

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

形式

我们不需要检查哪个项目配置是活动的,只需向几个项目配置中添加一个常量,然后检查项目XML中的常量值

这到底是什么意思?你不必为你的程序不使用的代码付费。Hans,这(对我来说)的重点是能够在一个项目中保留调试类和表单,而这个项目不能在发布版本中。谢谢,Robinicks。我稍微修改了你的答案,所以我。。。