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删除DebugSym1或DebugSym2 ,则会呈现相关#if语句的#else部分。 
我认为这是值得一提的这个话题的完整性,可以节省您的时间。 如果你有兴趣,你可以在这篇文章中find更多的内容。
  /p:DefineConstants是一个全部或没有处理。 
 如果你只是想closures跟踪符号,你不能这样做: msbuild /p:DefineTrace=false 
 你必须定义一些东西来覆盖所有已定义的符号: msbuild /p:DefineConstants="RANDOM-SYMBOL" 
感谢Michael Stum指出这个隐藏的规则, 我也写了一个关于它的博客