【问题标题】:Errors when referencing Silverlight class library from WPF application从 WPF 应用程序引用 Silverlight 类库时出错
【发布时间】:2011-06-03 20:59:48
【问题描述】:

我有一个 WPF 应用程序和一个 Silverlight 应用程序。它们都用于显示地图并共享一些相同的功能。

为了保持 DRY,我创建了一个 Silverlight 类库项目。我从 Silverlight 和 WPF 中都引用了它。它包含一些在两个项目中都很有用的实用方法。比如我有这个方法:

public static void CenterText(TextBlock name, Polygon poly)

silverlight 项目对此没有任何问题。但是,从我的 WPF 应用程序调用它时出现以下错误:

“System.Windows.Shapes.Polygon”类型是在未引用的程序集中定义的。您必须添加对程序集 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'的引用

但是,我在文件顶部有这一行:

using System.Windows.Shapes;

所以 WPF 可以完美地看到 Polygon 类。 我的猜测是 silverlight 类库使用的框架版本与 WPF 项目正在使用的版本不兼容。

所以问题是,我是在 WPF 应用程序中重写完全相同的代码,还是有什么方法可以在两者之间共享?

谢谢!

【问题讨论】:

    标签: wpf silverlight-4.0 .net-4.0


    【解决方案1】:

    你说得对,Silverlight 使用了完全独立的框架版本。它比 .NET 客户端运行时要小得多。

    这意味着您不能在同一个应用程序中混合使用 WPF 和 Silverlight 程序集。

    【讨论】:

      【解决方案2】:

      我遇到了这个错误,因为我下载了适用于 Silverlight 的 Expression Blend SDK,而不是我应该下载的:Microsoft Expression Blend Software Development Kit (SDK) for .NET 4。可以在 MSFT 的网站上找到它:

      http://www.microsoft.com/en-us/download/details.aspx?id=10801

      一旦我下载了适用于 .Net 的 Expression Blend SDK,删除了所有适用于 Silverlight 的 Blend SDK 引用,并添加了与适用于 .Net 的 Blend 相同的引用,我就开始运行了。

      【讨论】:

      • +1 用于链接和有关不同软件包的信息。我搜索了 System.Windows.Interactivity dll,并在我真的不想要那个时指向了 SL 包。
      【解决方案3】:

      在 Silverlight 中,该类位于 System.Windows.dll 中,而在 WPF 中,它位于 PresentationFramework.dll 中,该库试图获取在 WPF 应用程序中默认未引用的 Silverlight 程序集。

      【讨论】:

      • 这是有道理的。 .NET4 中似乎没有可引用的 System.Windows 程序集
      • 好吧,如果你从各自的文件夹中获取 dll,你可以引用它,问题是这不起作用,因为两个程序集都包含具有相同命名空间和名称的类型,所以会有冲突。
      猜你喜欢
      • 2011-04-15
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2014-04-27
      相关资源
      最近更新 更多