为什么Silverlight中的系统对象缺少某个方法?

时间:2011-08-11 18:02:45

标签: .net silverlight reference versioning

我正在开发一个Silverlight项目,最近我的团队中有人将var popups = VisualTreeHelper.GetOpenPopups()添加到我们应用中的方法中。当我从源代码控制中获取代码时,我收到一个编译错误,指出在GetOpenPopups上找不到VisualTreeHelperVisualTreeHelper是来自System.Windows.Media命名空间的对象,我的代码文件(对于此文件)与我团队其他成员的代码文件没有区别。在对象浏览器中,我可以看到System.Windows命名空间下的System.Windows.Media程序集中没有列出GetOpenPopups方法,但是我的团队其余部分都列出了GetOpenPopups()方法。看来我们有不同版本的这些程序集,但没有关于参考版本的警告,这些警告来自项目/解决方案。

我在这里缺少什么?为什么{{1}}对我(而不是团队的其他成员)缺失?

3 个答案:

答案 0 :(得分:2)

您确定要引用程序集的Silverlight版本吗? standard .Net version 不包含方法,而SL one则包含。

答案 1 :(得分:1)

在预感中,我下载并安装了最新版本的Silverlight SDK(项目中没有代码更改),现在该方法显示在VisualTreeHelper上。显然GetOpenPopups是最近添加的方法(从Silverlight 4开始)。我之前认为我已经安装了SDK,自从我们的项目开始大约一年以来我们一直在开发Silverlight 4,所以我仍然对我的机器上没有它的原因感到困惑。没有关于版本与我的机器上可用的版本以及我们项目中引用的内容不同的警告或错误。看起来我可能需要阅读.NET程序集中的版本控制,以便更好地了解它的工作原理,并确保在部署时不会出现问题。谢谢你的建议。

答案 2 :(得分:0)

Silverlight在VisualTreeHelper上的成员集非常有限,GetOpenPopups不是其中之一。这个问题真的是为什么你的团队的其他成员会看到一个不存在的方法?

一种情况可能是代码文件在另一个项目WPF项目中被链接,但有人忘记用#if SILVERLIGHT保护这段代码。看起来很好,因为他们目前在WPF项目上工作。

这里的一个教训是首先检查在线MSDN文档,或者只是在回答之前试一试。