在Windows和Silverlight类库之间共享C#代码

时间:2009-01-21 14:09:41

标签: c# windows silverlight sharing

我们编写了一个小型Windows类库,它实现了某些标准类型(最初的字符串)的扩展方法。我将它放在一个库中,这样我们的任何项目都可以通过简单地引用它并使用XXX.Extensions进行添加来使用它。

当我们想在Silverlight中使用其中一些方法时,出现了一个问题。尽管所有代码都是兼容的,但是在Silverlight中无法引用Windows库,因此我们创建了一个Silverlight库,该库具有指向相同类文件的链接,并将编译器指令放入类中以允许使用不同的声明和命名空间。这个工作正常,直到今天我在Windows扩展库中添加了一个新类,并意识到我必须记住将类链接到Silverlight库中。

这不太理想,我想知道是否有人可能有更好的方法在Windows和Silverlight项目之间共享扩展方法和其他帮助程序代码。

6 个答案:

答案 0 :(得分:15)

您无法将Silverlight程序集的引用设置为常规.NET程序集,但您可以反过来这样做。

因此,创建一个共享的Silverlight程序集并将代码添加到该程序集。现在,您可以将常规.NET和其他Silverlight程序集的引用设置为共享Silverlight程序集。

限制是你只能在那里放置可以在.NET和Silverlight CLR上运行的代码,但这与共享代码没什么不同。

答案 1 :(得分:8)

由于此问题已得到解答,因此Microsoft提供了一个新的解决方案Portable Class LibrariesHere是他们宣布的博客文章。

我正准备与他们一起玩,以便在我正在编写的Silverlight和一些服务器端代码之间共享代码,所以目前不能在链接上添加太多内容。

答案 2 :(得分:3)

Silverlight运行时与普通的.NET运行时不同。因此,您需要在项目级别进行操作以在多个平台之间共享代码。

以下是我done this for Autofac IoC container的方式。

使用此方法,您无需为每个目标平台创建不同的项目

PS:Composite WPF还有一个 Project Linker 工具,可以链接Silverlight和WPF项目(创建多个项目)。但它确实看起来很混乱。

答案 3 :(得分:2)

XNA项目存在类似问题。由于您可以定位多个不同的平台,因此您需要拥有不同的项目。原因是项目引用的基类库是特定于平台的,因此您不能只有一个项目。

如果您感到好奇,可以从this blog获得一些见解:

  

重新编译另一个源   平台,你需要另一个项目。   原因是因为   项目需要参考不同   XNA Framework的程序集   和底层的.NET Framework   (Xbox 360和Zune使用.NET   Compact Framework)和C#项目   不提供引用支持   不同的组件   平台。

答案 4 :(得分:2)

答案 5 :(得分:0)

在引用.Net中的Silveright类库时,我遇到了一些依赖性问题。

使用Visual Studio 2010和WCF RIA 1.0时的另一种方法:

  • 创建一个普通的.Net库程序集。
  • 创建Silverlight类库。在程序集的配置中,将第一个.NET库指定为“WCF RIA服务链接”
  • 将您的代码作为“ClassName.shared.cs”文件放在.NET库中。
  • WCF RIA将处理将文件复制到Silverlight程序集。