14

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

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

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

4

6 回答 6

14

您不能设置从 Silverlight 程序集到常规 .NET 程序集的引用,但您可以反过来这样做。

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

限制是您只能在其中放置适用于 .NET 和 Silverlight CLR 的代码,但这与共享代码没有什么不同。

于 2009-01-21T16:01:30.923 回答
8

既然已经回答了这个问题,微软就有了一个新的解决方案,便携式类库是他们宣布它的博客文章。

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

于 2011-07-13T10:35:19.543 回答
3

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

这是我为 Autofac IoC container 所做的

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

PS:复合 WPF中还有一个项目链接器工具,它允许链接 Silverlight 和 WPF 项目(创建多个项目)。但它看起来确实很乱。

于 2009-01-21T14:18:43.783 回答
2

XNA项目也有类似的问题。由于您可以针对多个不同的平台,因此您需要拥有不同的项目。这样做的原因是因为项目引用的基类库是特定于平台的,所以你不能只有一个项目。

如果你很好奇,你可以从这个博客中获得一些见解:

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

于 2009-01-21T14:14:14.153 回答
2

试试这个http://buildassilverlight.codeplex.com/

于 2010-07-13T19:37:04.937 回答
0

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

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

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