Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# x64中的Visual Studio designer不使用';行不通_C#_Visual Studio 2010_64 Bit_Designer - Fatal编程技术网

C# x64中的Visual Studio designer不使用';行不通

C# x64中的Visual Studio designer不使用';行不通,c#,visual-studio-2010,64-bit,designer,C#,Visual Studio 2010,64 Bit,Designer,在Visual Studio 2010 64位中,我无法设计表单。 我不断收到以下警告(和错误): 这只在我为x64编译时发生。。。在x86中,设计器工作得很好 我只想明确一点,我需要项目在x64上运行,因为项目的很多组件都是用x64编译的,如果表单是用x86,那么就无法运行 有没有其他人遇到过这种情况并找到了解决方案?我可以通过创建一个带有用户控件的WPF应用程序(将用户控件放在WPF应用程序上,然后构建x64)来重新解决您的问题 以下是我对发生了什么的猜测: VisualStudio是一个3

在Visual Studio 2010 64位中,我无法设计表单。
我不断收到以下警告(和错误):

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

我只想明确一点,我需要项目在x64上运行,因为项目的很多组件都是用x64编译的,如果表单是用x86,那么就无法运行


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

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

以下是我对发生了什么的猜测:

VisualStudio是一个32位应用程序,WPF设计器必须加载引用的程序集(当您使用用户控件时,您总是会看到这种行为,在用户控件中,您必须重新生成以使设计器更新)。Windows不支持32位和64位之间的共享-您必须拥有32位应用程序或64位应用程序,句号,无共享

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

以下是一个可能的解决方案:

使用“任意CPU”选项设计应用程序。这将导致您的代码在32位平台上JIT为32位,在64位平台上JIT为64位

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

    • 这在VS2008和VS2010中都是一个bug

      以下是错误报告:


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

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


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

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



      当然,这也适用于UserControls!我希望在我们的团队决定迁移到64位之前就知道这一点-在更改编译选项时发出通知会非常好,Microsoft…

      如果这是一个愚蠢的问题,很抱歉,但是您是否在64位O/S上运行Visual Studio?假设答案是“是”,您是否有任何依赖项(第三方库)不支持64位?或者,可能是包装本机dll的控件(在这种情况下,您将需要本机dll的64位版本)。如果是64位操作系统,则存在64位的依赖项。所有组件均为64位(已验证)。我能想到的唯一不是64位的东西可能是VS2010内部的东西。@SLaks-有趣:)…将调试器连接到VS并查看异常情况。目前正在VS2015中的WinForms项目中处理此64位问题。我们删除了AnyCPU。您知道其他解决方案吗?我也有同样的问题。移动到AnyCPU会产生大量错误。@Hans Passant:我同意,这是VS中的WPF设计器,而且是经过设计的。这非常重要易于重新编程-试一试:在VS中启动一个新的WPF项目(暂时不使用所有设置)。添加一个新的UserControl(您可以将其留空)。将用户控件添加到主窗体。Build(目前为止一切正常)。现在创建一个x64 Build profile并重建解决方案(boom)。切换回x86并重建(良好),起泡,冲洗重复。值得一提的是,我也可以使用与Winform designer相同的步骤重新编程。之所以会发生这种情况,是因为designer是一个32位的应用程序,而我们只给它一个64位的程序集来加载(因为用户控件在我们编译的输出中)。“任何CPU都可以“这是最好的答案。目前正在VS2015的WinForms项目中解决此64位问题。我们移除了所有的CPU。您知道其他解决方案吗?@TheFitGeekGirl Visual Studio设计器将需要32位程序集。即使您没有使用AnyCPU发布或Q/A您的软件,也可以创建AnyCPU或x86概要文件进行开发。如果您要求发布x64版本,您可以始终让生成服务器使用x64配置文件进行发布和Q/A版本。这是正确的答案。2018年,我们仍在与上个世纪的32位问题作斗争。C'mon MS:如果在x64中构建VS本身有那么困难,那么你的脸上有很多鸡蛋在VS 2013和VS 2015中仍然是一个bug:(在VS 2017中:(连接链接现在已经死了)在VS2019中:(这两个链接现在都死了,你还记得第二页的内容吗?答案中的第一个链接已经死了。
      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.