Переносимые библиотеки классов обрабатывают условные операторы / ссылки? - PullRequest
1 голос
/ 01 февраля 2012

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

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

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

Будет ли это соблюдаться в PCL?

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

1 Ответ

1 голос
/ 01 февраля 2012

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

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

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

...