Могу ли я сделать условную компиляцию на основе версии компилятора? - PullRequest
1 голос
/ 26 сентября 2008

Я поддерживаю .net 1.1 и .net 3.5 c # код сразу. Для этого я создал два файла csproject, один для .net 1.1, а другой для .net 3.5.

Теперь в своем исходном коде я добавляю новые функции, которые доступны только в версии .net 3.5, но я также хочу, чтобы код компилировался в VS 2003, без новых функций. Есть ли способ сделать условную компиляцию на основе версии компилятора?

В C ++ я могу сделать это, проверив значение для макроса _MSC _VER, но я ищу эквивалент C #.

Ответы [ 2 ]

1 голос
/ 26 сентября 2008

Вы можете определить разные символы в каждом файле CSPROJ и ссылаться на символы в источнике C #.

0 голосов
/ 26 сентября 2008

Если вы можете хранить определенный код 3.5 в отдельных файлах, вы можете просто разделить распределение файлов между двумя вашими файлами .csproj (или использовать 2 разные цели сборки в NAnt) - слишком плохие частичные классы появились только в 2.0, или это облегчит распространение кода вокруг ...

Если вам нужно смешать код на уровне файлов, атрибут [Conditional ()] может отфильтровать целые методы, но я не уверен, что компилятор все же попытается обработать код в методе. MSDN говорит, что код не будет скомпилирован в IL, но параметры будут проверены на тип, но я не пробовал. Больше информации здесь: http://bartdesmet.net/blogs/bart/archive/2006/08/30/4368.aspx и ссылка MSDN здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx

Если это возможно, поскольку у вас уже есть 2 файла проекта, вы можете указать разные определения в каждом из них, чтобы установить версию - не нужно искать макрос, когда вы можете сделать его самостоятельно.

...