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

我们编写了一个小的Windows类库,为一些标准types(string最初)实现了扩展方法。 我把它放在一个库中,以便我们的任何项目都可以通过简单地引用它并添加使用XXX.Extensions来使用它。

当我们想在Silverlight中使用这些方法时出现了一个问题。 尽pipe所有的代码都是兼容的,但Silverlight中不能引用Windows库,所以我们创build了一个Silverlight库,它链接到相同的类文件,并将编译器指令放入类中,以允许使用不同的声明和名称空间。 这工作得很好,直到今天,当我添加一个新的类到Windows扩展库,并意识到我将不得不记得将类连接到Silverlight库。

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

Solutions Collecting From Web of "在Windows和Silverlight类库之间共享C#代码"

您不能将Silverlight程序集的引用设置为常规的.NET程序集,但是您可以这样做。

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

限制是你只能将代码放在.NET和Silverlight CLR上,但这与共享代码没有区别。

由于这个问题已经得到解答,所以有一个来自Microsoft的便携式类库的新解决方案。 这是他们宣布的博客文章。

我正要开始与他们共享代码,以便在Silverlight和我写的一些服务器端代码之间共享代码,所以现在不能添加太多链接。

Silverlight运行时不同于普通的.NET运行时。 所以你需要在项目层面做一些技巧来在多个平台之间共享代码。

以下是我为Autofac IoC容器所做的工作 。

通过这种方法, 您不必为每个目标平台创建不同的项目

PS:还有一个来自Composite WPF的Project Linker工具,它允许链接Silverlight和WPF项目(创建多个项目)。 但是看起来很乱。

XNA项目也有类似的问题。 既然你可以瞄准几个不同的平台,你需要有不同的项目。 原因是因为项目引用的基类库是平台特定的,所以你不能只有一个项目。

如果您好奇,可以从这个博客中了解一些情况 :

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

在.Net中引用Silverlight类库时,我遇到了一些依赖关系问题。

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

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