Если вы можете хранить определенный код 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 файла проекта, вы можете указать разные определения в каждом из них, чтобы установить версию - не нужно искать макрос, когда вы можете сделать его самостоятельно.