从WPF应用程序引用Silverlight类库时出错

时间:2011-06-03 20:59:48

标签: wpf silverlight-4.0 .net-4.0

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

我创建了一个Silverlight类库项目以保持DRY。我从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应用程序中重写了完全相同的代码,或者我可以通过某种方式在两者之间共享?

谢谢!

3 个答案:

答案 0 :(得分:4)

您是对的,Silverlight使用完全独立的框架版本。它比.NET客户端运行时更小,更小。

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

答案 1 :(得分:3)

我遇到了这个错误,因为我已经下载了适用于Silverlight的Expression Blend SDK而不是我应该下载的版本:用于.NET 4的Microsoft Expression Blend软件开发工具包(SDK)。可以在MSFT的网站上找到,这里:

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

我下载了.Net的Expression Blend SDK后,删除了所有Blend SDK for Silverlight引用,并添加了相同的引用作为Blend for .Net,我启动并运行。

答案 2 :(得分:2)

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