我有一个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应用程序中重写了完全相同的代码,或者我可以通过某种方式在两者之间共享?
谢谢!
答案 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应用程序中引用。