Ответ 1
Вы видели это? (большинство информации находится в предпоследнем сообщении)
/p:DefineConstants="MYSYMBOL1;MYSYMBOL2"
Возможно, я просто слеп, но есть ли командная строка для указания условных символов компиляции в 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.
Вы видели это? (большинство информации находится в предпоследнем сообщении)
/p:DefineConstants="MYSYMBOL1;MYSYMBOL2"
Мне пришлось использовать пробел вместо точки с запятой a la this post by 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. Полезно знать, я думаю...
То, что сказано в ответах, действительно для кода C#
, а также для кода ASP.NET "codebehind" С#. Для веб-проектов 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
.
Я думал, что это стоит упомянуть для полноты этой темы и может сэкономить ваше время. Подробнее вы можете найти в этой статье, если вам интересно.
/p:DefineConstants
- это все или ничего.
Если вы просто хотите отключить символ трассировки, вы не можете просто сделать это с помощью: msbuild /p:DefineTrace=false
Вы должны определить что-то, чтобы переопределить все уже определенные символы: msbuild /p:DefineConstants="RANDOM-SYMBOL"
Спасибо, Майкл Стам, укажите это скрытое правило Я также написал блог об этом