web-dev-qa-db-ja.com

x64のVisual Studioデザイナーが機能しない

Visual Studio 2010 64ビットでは、フォームをデザインできません。
私はこの警告(およびエラー)を受け取り続けます:

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でコンパイルされており、フォームがx86の場合は機能しないため、x64でプロジェクトを実行する必要があることを明確にしたいだけです。

他の誰かがこれに遭遇し、解決策を見つけましたか?

32
Yochai Timmer

ユーザーコントロールを使用してWPFアプリケーションを作成することで問題を再現できます(ユーザーコントロールをwpfアプリに置き、x64をビルドします)。

ここで何が起こっているのかについて私の推測です:

Visual Studioは32ビットアプリケーションであり、WPFデザイナーは参照されたアセンブリを読み込む必要があります(ユーザーコントロールを使用すると、デザイナーを更新するために再構築する必要がある場合、常にその動作がわかります)。 Windowsは32ビットと64ビットの間の共有をサポートしていません。32ビットアプリまたは64ビットアプリのいずれかが必要です。

WPFデザイナは32ビットであるため、アセンブリは32ビットである必要があります。

これが可能な解決策です:

「すべてのCPU」オプションを使用してアプリを設計します。これにより、32ビットプラットフォームでは32ビット、64ビットプラットフォームでは64ビットのコードがJITになります。

  • アセンブリは32ビットに変換されるため、デザイナーは「任意のCPU」で作業します。
  • 特に64ビットをデバッグする必要がある場合は、ビルド構成を64ビットに切り替えます(フォームデザインを「32ビットまたは「任意のCPU」で実行する必要があることに注意してください)。
33
JMarsch

Microsoft から提案されたソリューションは、ベースクラスを個別のアセンブリに移動し、AnyCPUまたはx86を使用してコンパイルします(実際のプロジェクトをx64にする必要がある場合)。

残念ながら、これはall基本クラスに適用されます。継承がFormCFormBFormAの場合、両方のFormAandFormBは、デザイナーでFormCを編集する場合、(外部)32ビットアセンブリ内にある必要があります。

もちろん、これはUserControlsにも適用されます!私たちのチームが64ビットに移行することを決定する前に、これを知っていればよかった-コンパイルオプションを変更したときの通知は本当に良かった、マイクロソフト...

6
mike

これはVS2008とVS2010の両方のバグです。

バグレポートは次のとおりです。

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

これはまだ修正されていないようです。

6

Microsoftからのこの2つのリンクは、この問題を正確に説明しています。私はそれらを再開します。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/96705

3
Carlos Iglesias