Обрабатывают ли переносимые библиотеки классов условные операторы / ссылки?

У меня есть библиотека классов, которую я разделяю между .Net Framework и Silverlight, используя два связанных проекта и технику связанных файлов.

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

#if SILVERLIGHT
...
#else
...
#endif

Будет ли это учтено в PCL?

Кроме того, часть кода, которая НЕ является silverlight, ссылается на стороннюю обычную библиотеку классов .Net. PCL все еще компилируется, но я не могу использовать его в Silverlight из-за этой ссылки. Есть ли способ указать PCL включать его только для использования .Net?


person Matt Johnson-Pint    schedule 01.02.2012    source источник


Ответы (1)


Этот шаблон реализует переносимость во время компиляции, а не во время выполнения.

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

Если у вас очень мало кода, специфичного для Silverlight, вы можете рассмотреть возможность динамической привязки к зависимостям Silverlight во время выполнения с использованием отражения. После этого ваш PCL можно будет использовать в любом контексте, но он будет «плавно обновлен» до Silverlight, если Silverlight присутствует.

person sblom    schedule 01.02.2012
comment
Спасибо. Я не думал об отражении. - person Matt Johnson-Pint; 03.02.2012