2

我有一台运行 Windows 7 64 位的 x64 机器。自本周初以来,我的情况似乎很奇怪。

如果我构建并运行平台目标设置为 x86 的 WPF 应用程序,则在尝试创建 Grid 时出现 MissingMethodException:

var g = new Grid();

但是,创建 StackPanel 工作正常:

var s = new StackPanel();

如果我将平台目标切换到 x64 或 AnyCpu,这两个代码都可以正常工作。我正在考虑框架中的一个损坏的程序集,但它看起来非常奇怪......有什么想法吗?

更新:

我一直在与 Microsoft 内部 WPF 团队的人员保持联系。但是,他们没有时间查看我的机器以了解问题所在。与此同时,我不得不重新安装我的机器以保持正常工作。谢谢大家的帮助。我认为问题与 WOW64 功能有关,但很难更准确。如果我发现更多信息,我会更新这个问题。

4

2 回答 2

4

我也有这种配置,并且在构建使用网格的 x86 应用程序时没有遇到任何问题。

我会卸载您正在使用的 .NET Framework 版本(看起来像 .NET 4.0)并重新安装它。为了彻底,您还可以卸载 Visual Studio 2010 并重新安装它(尽管这可能是矫枉过正)。

问题必须只存在于您正在处理的机器上......否则会有暴徒和干草叉等......前往华盛顿州雷德蒙德。:-) 您可以尝试在另一台机器上创建一个示例项目......只是为了您的理智。:-)

更新

我只是想添加 System.Windows.Controls.Grid 存在于 PresentationFramework 程序集中。看看这个文件在你的机器上的存储位置可能会很有趣......看看你是否注意到任何东西。解决方案可能仍然是重新安装......但是,嘿,更多信息总是更好。

对于 .NET 4.0,PresentationFramework 程序集位于:C:\Windows\Microsoft.NET\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35

对于 .NET 3.0/3.5,PresentationFramework 程序集位于:C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0

于 2010-10-15T13:30:58.013 回答
4

将平台目标设置为 x86 将导致您的应用程序在非托管程序集上调用 x86 版本并在 WOW64 模式下运行。请参阅平台目标上的这篇文章WOW64 上的这个 msdn 页面。如果您在Reflector中跟踪静态 Grid 构造函数,看起来某些线程初始化代码调用了一个外部非托管函数“RuntimeHelpers.PrepareConstrainedRegions()”,这可能会导致问题(StackPanel 不调用此代码)。这背后有一些猜测,但您可以尝试运行 Windows Update 以确保您拥有与您的同事相同的更新,并确保您也拥有所有 VS/.NET 更新。

最终,除非您从您的代码中调用某些只能作为 x86 程序集使用的第三方非托管 dll,否则您可能应该将平台目标保留为 Any CPU,以便它将在 x86 和 x64 平台上本机运行。

最后,如果在运行 Windows 更新后您仍然看到问题,如果可能,请更新您同事的 PC 并查看问题是否出现。如果是这样,则 WOW64 层中可能存在错误,最好向Microsoft 提交错误报告

于 2010-10-20T18:46:01.623 回答