msbuild,定义条件编译符号

我可能只是盲目,但是有一个命令行来指定MSBUILD条件编译符号?

我目前在我的buildscript中有这个行:

SET MSBUILD=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe SET CONFIG=Debug %MSBUILD% /p:Configuration=%CONFIG% /p:OutputPath=..\..\output source\MyProject\MyProject.csproj 

我想添加一个条件。 在Visual Studio中,我可以进入Project Properties => Build => Conditional compilation symbols,但是我还没有看到msbuild的选项?

奖金噶如果你知道我是否可以完全覆盖已经在.csproj文件中指定的所有符号,以确保只有从我的Buildscript的条件进去。

你见过这个吗? (大多数信息是在倒数第二个职位)

 /p:DefineConstants="MYSYMBOL1;MYSYMBOL2" 

我必须使用BjörnLasar的这篇文章中的分号来代替分号: http : //www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx

更新:博客已经消失; 通过互联网检索归档 :

最近我不得不直接使用MSBuild来自动化一些构build。 我还必须根据configurationconfiguration一些预处理器定义。 这通常是通过这样的参数来完成的

 "/p:DefineConstants=MY_PREPROC_FLAG" 

这里没什么特别的,因为网上有足够的评论。 今天我需要一个标志更多,我使用命令行语法类似于我从IDE知道它:

 "/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG" 

但这一个没有工作。

所以问题是,如果你想通过命令行来支持多个定义到一个项目,你将不得不用简单的空格来分隔它们。

 "/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 

它将被添加到(以分号分隔)从IDE定义。 很高兴知道我认为…

在答案中所说的是有效的C#代码,也为ASP.NET“codebehind”C#代码。 对于ASP.NET Web项目 ,如果你想在ASPX页面中进行条件编译,它有点不同于在页面上有条件地呈现HTML(注意我删除了MasterPageFile="..." AutoEventWireup="true" CodeBehind="..." Inherits="..." ,这通常也在<%@ ... %>声明中):

 <%@ Page Title="MyPage" Language="C#" CompilerOptions="/d:DebugSym1;DebugSym2" %> <% #if DebugSym1 %> <h4>Section1</h4> <% #else %> <h4>(Section 1 skipped)</h4> <% #endif %> <% #if DebugSym2 %> <h4>Section2</h4> <% #else %> <h4>(Section 2 skipped)</h4> <% #endif %> 

如果从CompilerOptions删除DebugSym1DebugSym2 ,则会呈现相关#if语句的#else部分。

我认为这是值得一提的这个话题的完整性,可以节省您的时间。 如果你有兴趣,你可以在这篇文章中find更多的内容。

/p:DefineConstants是一个全部或没有处理。

如果你只是想closures跟踪符号,你不能这样做: msbuild /p:DefineTrace=false

你必须定义一些东西来覆盖所有已定义的符号: msbuild /p:DefineConstants="RANDOM-SYMBOL"

感谢Michael Stum指出这个隐藏的规则, 我也写了一个关于它的博客