x64中的Visual Studio设计器不起作用

时间:2011-03-21 14:21:08

标签: c# visual-studio-2010 64-bit designer

在Visual Studio 2010 64bit中,我无法设计表单 我一直收到这个警告(和错误):

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中则无法工作。

有没有其他人遇到过这个并找到了解决方案?

4 个答案:

答案 0 :(得分:29)

我可以通过使用用户控件创建WPF应用程序(将用户控件放在wpf应用程序上,并构建x64)来重现您的问题。

以下是关于发生了什么的猜测:
Visual Studio是一个32位应用程序,WPF设计器必须加载引用的程序集(您在使用用户控件时始终会看到该行为,您必须重新构建以使设计器更新)。 Windows不支持32位和64位之间的“thunk” - 您必须是32位应用程序或64位应用程序,期间,不能共享。

由于hte WPF设计器是32位,因此程序集需要为32位。

这是一个可能的解决方案: 使用“Any CPU”选项设计您的应用程序。这将使您的代码在32位平台上的JIT为32位,在64位平台上为64位。

  • 设计人员将在“任何cpu”中工作,因为程序集会被装配到32位。
  • 当您需要专门调试64位时,将构建配置切换为64位(知道必须切换回“32位或”任何cpu“进行表单设计)

答案 1 :(得分:6)

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

这是错误报告:

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

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

答案 2 :(得分:5)

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

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

当然,这也适用于UserControls!我希望在我们的团队决定转移到64位之前我已经知道这一点 - 更改编译选项的通知本来不错,微软......

答案 3 :(得分:4)

来自microsoft的这几个链接正好解释了这个问题: 我恢复了它们:它是VisualStudio的限制,因为它没有x64版本。

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