2011-03-21 88 views
16

在Visual Studio 2010 64位中,我无法设计我的表单。
我不断收到这样的警告(和错误):x64中的视觉工作室设计师不工作

Warning 18 
The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: 
MainForm --- The base class 'Blah' could not be loaded. Ensure the assembly has been referenced and that all projects have been built. 

这只有当我编译为64 ... 86中设计效果很好发生。

只是想明确一点,我需要项目在x64上工作,因为很多项目的组件都是在x64中编译的,而且如果表单是在x86中,它们将无法工作。

有没有其他人遇到过这种情况,并找到了解决办法?

+0

尝试重建解决方案。 – SLaks 2011-03-21 14:22:28

+0

对不起,如果这是一个愚蠢的问题,但是你是否在64位O/S上运行Visual Studio?假设答案是“是”,那么您是否有任何不支持64位的依赖项(第三方库)?或者,也许是一个包装本机DLL的控件(在这种情况下,你将需要一个64位版本的本机DLL) – JMarsch 2011-03-21 14:26:08

+0

这是一个64位操作系统,有64位的依赖关系。所有组件都是64位(已验证)。唯一我能想到的不是64位可能是VS2010内部的东西。 @SLaks - 有趣:) ... – 2011-03-21 14:50:36

回答

23

我可以通过用户控件创建一个WPF应用程序(将用户控件放在wpf应用程序中,并构建x64)来重新制作您的问题。

这是我的猜测,这是怎么回事:
Visual Studio是一个32位的应用程序时,WPF设计已加载引用的程序集(你看,所有行为的时候,你使用的用户控件,在那里你必须重建才能让设计师更新)。 Windows不支持32位和64位之间的“thunk” - 您必须是32位应用程序或64位应用程序,不能共享。

因为hte WPF设计器是32位的,所以程序集需要是32位的。

以下是可能的解决方案: 使用“任意CPU”选项设计您的应用程序。这将导致您的代码在32位平台上进行32位操作,在64位平台上进行64位操作。

  • 设计人员将在“任何cpu”中工作,因为程序集会拼凑到32位。
  • 当你需要调试64位明确,切换生成配置为64位(知道你必须切换到“32位或‘任何CPU’做形式设计)
+1

这不是一个WPF错误。 – 2011-03-21 15:38:04

+0

@Hans Passant:我同意,它是VS中的WPF设计器,它是有设计的。这是很容易repro - 给它一个镜头:在VS中启动一个新的WPF项目(现在保留所有设置)。添加一个新的UserControl(你可以留空)。将用户控件添加到主窗体。建立(迄今为止都很好)。现在创建一个x64构建配置文件并重建解决方案(boom)。切换回x86并重建(良好),泡沫,冲洗重复。 – JMarsch 2011-03-21 19:24:03

+3

对于它的价值,我可以使用与Winform设计器相同的步骤进行再现。发生这种情况是因为设计人员是一个32位应用程序,我们只是将它交给64位程序集来加载(因为用户控件位于我们的编译输出中)。 “任何CPU”是最好的答案。 – JMarsch 2011-03-21 19:29:42

3

Microsoft所提出的解决方案是将基类移动到一个单独的程序,使用AnyCPU或x86(如果你的实际项目必须是64位)编译。

不幸的是这适用于所有基类:如果你的继承FormCFormBFormA,那么这两个FormAFormB必须在(外部)32位组件,如果你想在设计师编辑FormC

当然,这也适用于UserControls!我希望在我们的团队决定升级到64位之前知道这一点 - 更改编译选项的通知本应该是非常好的,微软...