可移植类库是否处理条件语句/引用?

时间:2012-02-01 04:15:15

标签: c# .net silverlight portable-class-library

我有一个类库,我在.Net Framework和Silverlight之间共享,使用两个链接项目和链接文件技术。

我想将它转换为单个可移植类库,但我有一些代码在两者之间有所不同。我目前使用条件编译器语句来分离这个文件的实现。

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

这会在PCL中得到尊重吗?

此外,不是silverlight的代码部分引用了第三方常规.Net类库。 PCL仍在编译,但由于此引用,我无法在Silverlight中使用它。有没有办法告诉PCL只包含它用于.Net用法?

1 个答案:

答案 0 :(得分:1)

该模式实现了编译时可移植性,而不是运行时可移植性。

如果您有大量特定于Silverlight的代码,那么您实际上没有可移植的库 - 您应该考虑将Silverlight特定的代码分解为单独的程序集,并使该专用程序集依赖于您的PCL

如果您的Silverlight特定代码非常少,则可以考虑使用反射在运行时动态绑定到Silverlight依赖项。然后,您的PCL可以在任何上下文中使用,但如果Silverlight存在,则会“优雅地升级”到Silverlight。