关于c#:x64中的Visual Studio设计器不起作用

Visual studio designer in x64 doesn't work

在Visual Studio 2010 64位中,我无法设计窗体。我一直收到这个警告(和错误):

1
2
3
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.

这只在我为x64编译时发生…在x86中,设计师工作得很好。

我只想明确一点,我需要这个项目在x64上工作,因为很多项目的组件是在x64中编译的,如果表单是在x86中,那么这些组件将无法工作。

是否有其他人遇到这种情况并找到了解决方案?


我可以通过创建一个带有用户控件的WPF应用程序(将用户控件放在WPF应用程序上,并构建x64)来重新处理您的问题。

我猜是怎么回事:Visual Studio是一个32位应用程序,WPF设计器必须加载引用的程序集(在使用用户控件时,您会一直看到这种行为,在该控件中,必须重新生成才能使设计器更新)。Windows不支持32位和64位之间的"thunk"——您必须是32位应用程序或64位应用程序,句点,不共享。

由于hte wpf设计器是32位的,所以程序集必须是32位的。

以下是一个可能的解决方案:使用"任意CPU"选项设计应用程序。这将导致代码在32位平台上JIT为32位,在64位平台上JIT为64位。

  • 设计器将在"任何CPU"中工作,因为程序集将被抖动到32位。
  • 当需要专门调试64位时,将构建配置切换到64位(知道必须切换回"32位"或"任意CPU"进行表单设计)


这是VS2008和VS2010中的一个错误。

这是错误报告:

http://connect.microsoft.com/VisualStudio/feedback/details/646328/the-designer-could-not-be-shown-with-platform-x64

似乎还没有办法解决这个问题。


来自Microsoft的建议解决方案是将基类移动到使用anycpu或x86编译的单独程序集(如果实际项目必须是x64)。

不幸的是,这适用于所有的基类:如果您的继承是FormCFormBFormA,那么如果您想在设计器中编辑FormCFormAFormB都必须在(外部)32位程序集中。

当然,这也适用于用户控件!我希望在我们的团队决定移到64位之前我就知道这一点——当更改编译选项的时候会有一个很好的通知,微软……


这两个来自微软的链接正好解释了这个问题:我继续他们:这是一个限制,因为它没有一个x64版本的VisualStudio。

http://connect.microsoft.com/VisualStudio/feedback/details/583872/windows-forms-designer-cant-design-form-inherited-from-form-in-x64-assembly

http://support.microsoft.com/kb/967050