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 => Условные символы компиляции, но я не видел эту опцию для msbuild?
Бонус Карма, если вы знаете, могу ли я полностью переопределить все символы, уже указанные в файлах.csproj, чтобы убедиться, что в него входят только условные выражения из моего Buildscript.
4 ответа
Вы видели это? (большая часть информации находится в предпоследнем посте)
/p:DefineConstants="MYSYMBOL1;MYSYMBOL2"
Я должен был использовать пробел вместо точки с запятой а-ля Björn Lasar: http://www.linqinpark.net/2009/01/13/MSBuildWithMultipleDefineConstants.aspx
Обновление: блог исчез; получено через интернет-архив:
Недавно мне пришлось использовать MSBuild напрямую для автоматизации некоторых сборок. Я также должен был настроить некоторые определения препроцессора на основе конфигурации. Обычно это делается с помощью такого аргумента
"/p:DefineConstants=MY_PREPROC_FLAG"
Ничего особенного здесь нет, так как в Интернете достаточно комментариев по этому поводу. Сегодня мне понадобился еще один флаг, и я использовал синтаксис командной строки, подобный тому, как я знал его из IDE:
"/p:DefineConstants=MY_PREPROC_FLAG;YET_ANOTHER_FLAG"
но этот не сработал.
Итак, дело в том, что если вы хотите поддерживать множественные определения для проекта с помощью командной строки, вам придется разделить их простыми пробелами...
"/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG"
и он будет добавлен в (Определенные точкой с запятой) Определения из IDE. Приятно знать, я думаю...
/p:DefineConstants
это сделка все или ничего.
Если вы просто хотите отключить символ трассировки, вы не можете просто сделать это с помощью: msbuild /p:DefineTrace=false
Вы должны определить что-то, чтобы переопределить все символы, уже определенные: msbuild /p:DefineConstants="RANDOM-SYMBOL"
Спасибо, Майкл Стум, указал на это скрытое правило, я также написал блог об этом --- мертвая ссылка
То, что сказано в ответах, действительно для C#
код, а также для ASP.NET "codebehind" C# кода. Для веб-проектов ASP.NET, если вы хотите также выполнить условную компиляцию на страницах 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 %>
Если вы удалите DebugSym1
или же DebugSym2
от CompilerOptions
тогда #else
часть соответствующей #if
Заявление представляется.
Я думал, что это стоит упомянуть для полноты этой темы и может сэкономить ваше время. Больше вы можете найти в этой статье, если вам интересно.