【问题标题】:Sharing C# code between Windows and Silverlight class libraries在 Windows 和 Silverlight 类库之间共享 C# 代码
【发布时间】:2009-01-21 14:09:40
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# windows silverlight sharing


    【解决方案1】:

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

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

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

    【讨论】:

    • +1:我正在使用一个必须在智能设备和台式机上运行的库来做到这一点。这称为可重定向性(请参阅msdn.microsoft.com/en-us/magazine/cc163387.aspx)。
    • 情况似乎并非如此。我创建了一个快速 Silverlight 库来测试它,但是当尝试从 Windows 库项目中引用它时,我得到“Silverlight 项目只能被其他 Silverlight 项目引用。”
    • @Steve:您是否尝试过仅引用 dll 而不是整个项目?
    • @Andreas,是的,我现在看到我可以对 DLL 进行二进制引用,但不能对项目进行引用。所以这似乎是一个很好的解决方案。
    • @Steve:我还刚刚从常规 .NET 类库项目中设置了对 Silverlight 类库项目的引用,并且效果很好。我想知道为什么同样的方法对你不起作用。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      这就是我的done this for Autofac IoC container

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

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

      【讨论】:

        【解决方案4】:

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

        如果你好奇,可以从this blog得到一点见解:

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

        【讨论】:

          【解决方案5】:

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-03-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-06-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多