Определен ли прекомпилятор aC# для версии CLR?
Мне нужно скомпилировать код условно по версии CLR.
например, есть код, который мне нужно скомпилировать только в CLR 2 (.NET 3.5 VS2008), а не в CLR 4 (.NET 4 VS2010)
Есть ли директива прекомпилятора для текущей версии CLR, которую я могу использовать внутри предложения #if?
Благодарю.
4 ответа
Не так, как я знаю.
попробуйте использовать свой, такой как:
#if CLR_V2
#if CLR_V4
#error You can't define CLR_V2 and CLR_V4 at the same time
#endif
code for clr 2
#elif CLR_V4
code for clr 4
#else
#error Define either CLR_V2 or CLR_V4 to compile
#endif
И тогда вы можете определить CLR_V2 и / или CLR_V4 в окне свойств проекта Visual Studio или аргументах командной строки csc.
Вы всегда можете добавить что-то в ваш скрипт MSBuild, который проверяет версию CLR, затем условно определяет и передает символ препроцессора в компилятор, который можно проверить внутри кода с помощью #if.
Согласно здесь ответ - нет. Однако один из приемов, которые мы используем, состоит в том, чтобы поместить специфичный для версии код в сборки, которые загружаются во время выполнения. Затем вы можете получить версию CLR во время выполнения с помощью http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.runtimeenvironment.aspx.GetRuntimeDirectory().
Код, зависящий от версии, компилируется с использованием средства таргетинга, доступного в C#3.5 и далее.
Да, есть директивы условной компиляции, они выглядят так же, как препроцессор C
редактировать: полностью неверно истолковать этот вопрос - время для перерыва