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指出这个隐藏的规则, 我也写了一个关于它的博客