2009-12-10 7 views
2

Мне нужно скомпилировать код условно с помощью версии CLR.
Например, есть код, который мне нужно скомпилировать только в CLR 2 (.NET 3.5 VS2008), а не в CLR 4 (.NET 4 VS2010)
Есть ли директива прекомпилятора для текущей версии CLR, которую я могу использовать внутри #если да?Есть ли прекомпилятор C# для версии CLR

Спасибо.

ответ

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.

+2

, например: #define CLR_V4 // вы можете определить символ в свойствах проекта в VS, или с помощью аргументов командной строки CSC, слишком с использованием системы; класс Программа { статической силы Main() { \t #if CLR_V2 #if CLR_V4 #error Вы не можете определить CLR_V2 и CLR_V4 одновременно #endif консоли. WriteLine ("clr 2.0"); #elif CLR_V4 Console.WriteLine ("clr 4.0"); #else #error Определить либо CLR_V2 или CLR_V4 компилировать #ENDIF } } – deerchao

+0

Спасибо, то определить в свойствах проекта было то, что мне не хватало. –

1

Вы всегда можете добавить что-то в свой скрипт MSBuild, который проверяет версию CLR, а затем условно определяет и передает символ препроцессора компилятору, который может быть протестирован внутри кода с помощью #if.

0

Да есть conditional compilation directives они выглядят так же, как C препроцессора материал

редактирования: полностью неправильно, что вопрос - время для перерыва

0

Согласно here ответ нет. Однако один трюк, который мы используем, заключается в том, чтобы поместить код версии в сборку, загруженную во время выполнения. Затем вы можете получить версию CLR во время выполнения на System.Runtime.InteropServices.RuntimeEnvironment .GetRuntimeDirectory().

Код конкретной версии скомпилирован с использованием средства таргетинга, доступного с C# 3.5 и далее.

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