0

У меня есть базовая библиотека для поддержки в нескольких версиях. Я использую SVN-переключатель, когда мне нужно работать с другой версией.VS2008: Несколько конфигураций сборки с настройками не работают должным образом

У меня нет нескольких версий решения для тестовых приложений, поэтому я подумал, что для разных версий я мог бы выполнять несколько конфигураций решений/проектов, которые определяют символы для версии, чтобы иметь возможность иметь код, зависящий от версии, в моем тесте ,

В настоящее время у меня есть следующие конфигурации сборки в решении тестового приложения: Debug, Release, DebugV10, ReleaseV10, DebugV15, ReleaseV15. В конфигурациях * V10 и * V15 я создал и выбрал соответствующие конфигурации * V10 и * V15 PROJECT для двух проектов, имеющих тестовый код, зависящий от версии (не для всех проектов, большинство из них запускают обычную конфигурацию Debug/Release в решении -Vx конфигурации).

В этих конфигурациях проектов я ввел соответствующие условные символы компиляции (VERSION10 и VERSION15).

Сейчас в моем коде в проекте я хожу как

#if VERSION10 
    // do v1.0 stuff 
#elif VERSION15 
    // do v1.5 stuff 
#else 
    // do trunk stuff 
#endif 

Но, видимо, VS не распознает символы. Даже простой #if DEBUG больше не работает, allthoug определяет постоянную DERBUG, проверяется во всех конфигурациях проекта Debug *.

Это известная вещь? Что я могу сделать с этим?

+0

Как вы определяете символы? Если это просто определено (без какого-либо значения), не следует ли использовать ** #, если определено **? Кроме того, иногда символ распознается правильно, но не визуализируется правильно VS, то есть не окрашивается правильно. –

+0

Я определил символы в свойствах проекта «Сборка» - вкладка в поле для условных символов компиляции. И это не только визуализация, условный код на самом деле не компилируется в ЛЮБОЙ конфигурации, даже нормальный код #if DEBUG в обычной, немодифицированной конфигурации сборки отладки (которая использовалась только для копирования настроек). –

+1

btw: ** # если определено **, не является допустимой директивой в C#. –

ответ

0

Концепция, что вы описываете звучит хорошо.

То есть, код использует:

#if VERSION10 ... #endif 

и конфигурация проекта определяет VERSION10

и конфигурация Решение устанавливается, что настроен на использование указанной выше конфигурации проекта.

Если все правильно настроено, я бы ожидал, что он сработает.

Тот факт, что вы говорите даже, что DEFUG не работает должным образом, предполагает, что что-то очень нарушено.

Я предлагаю вам попробовать самый простой случай, чтобы убедиться, что вы undersatand, как настроить: Создать новый минимальный «привет мир» приложение, которое только имеет простой код, который позволяет отличить друг от друга версии:

#if VERSION1 
    Console.WriteLine("Hello from version 1"); 
#else 
    Console.WriteLine("Hello from version 2"); 
#endif 

Затем создайте конфигурации проекта («Debug Version 1», «Debug version 2») и посмотрите, можете ли вы их настроить (один с VERSION1, один без), чтобы получить два выхода при построении.

Затем добавьте конфигурации решений, которые используют вышеуказанные конфигурации Проекта, и постройте их, чтобы проверить, что они печатают правильные вещи при их исполнении.

Как только вы это сделали, у вас должна быть рабочая система (понимание того, как эти элементы связаны друг с другом), которые вы можете применить к своему более сложному проекту. Чтобы применить их обратно, я предлагаю удалить большую часть конфигураций проекта/решения, а затем перестроить их с нуля теперь, когда вы уверены, что знаете, что делать - часто перестраивая эти вещи из первых принципов, получается лучше, чем пытаться настроить существующие «сломанные» «вернуться в жизнь.

+0

Что-то неизвестное действительно было не так. Я удалил все конфиги и настроил их снова, и теперь он работает. –

0

Условная компиляция в C# отличается от C и C++. См. here для информации о классе ConditionalAttribute.

Например:

doDebugOutput(); // unconditionally call the optional code 

Conditional["DEBUG"] 
void DoDebugOutput() 
{ 
    // do expensive debug-only output here 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^