C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

x64プロジェクトでカスタムコントロールを使う

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■103622 / inTopicNo.1)  x64プロジェクトでカスタムコントロールを使う
  
□投稿者/ のの (1回)-(2025/03/30(Sun) 15:33:23)

分類:[.NET 全般] 

.net frameworkのVB.NETに関する質問です。

x64プロジェクトでカスタムコントロールを使いたいのですが、
フォーム用に貼り付けようとするとエラーが出てしまいます。
any CPUやx86だとエラーは出ません。


検索して調べてみると

https://stackoverflow.com/questions/27992386/how-can-i-put-a-64-bit-user-control-into-visual-studio-2012s-toolbox

https://developercommunity.visualstudio.com/t/error-on-customcontrol-when-targeting-x64-cpu/173954

https://clown.cube-soft.jp/entry/20120725/vusual_studio_x64

Visual Studioがx86で動いているため、
x64ではカスタムコントロールは使えないとのことでした。

これらの記事は少し古いですが、
最新のバージョンでもx64には対応していないのでしょうか?


引用返信 編集キー/
■103623 / inTopicNo.2)  Re[1]: x64プロジェクトでカスタムコントロールを使う
□投稿者/ とっちゃん (843回)-(2025/03/30(Sun) 16:16:13)
No103622 (のの さん) に返信
> Visual Studioがx86で動いているため、
> x64ではカスタムコントロールは使えないとのことでした。
>
> これらの記事は少し古いですが、
> 最新のバージョンでもx64には対応していないのでしょうか?
>

VS2022から、VSも64bit化されたので、x64なカスタムコントロールが動くと思います。
とはいえ自前のカスタムコントロール類は持っていないので試したことはありませんが。

引用返信 編集キー/
■103624 / inTopicNo.3)  Re[1]: x64プロジェクトでカスタムコントロールを使う
□投稿者/ 魔界の仮面弁士 (3836回)-(2025/03/30(Sun) 16:50:22)
2025/03/30(Sun) 17:21:01 編集(投稿者)

No103622 (のの さん) に返信
> .net frameworkのVB.NETに関する質問です。
現在の環境は Visual Studio 2022 未満のバージョンですか?


> x64プロジェクトでカスタムコントロールを使いたいのですが、
基本的には AnyCPU ビルドのコントロールを使うことが望ましいですが、
AnyCPU をサポートしない非.NET製コントロールを用いる場合は、
それが x86(WoW64も含む) であるなら VS2019 を使い、
x64 であるなら VS2022を使うことで、
フォーム デザイナーを利用することができるでしょう。


> Visual Studioがx86で動いているため、
> x64ではカスタムコントロールは使えないとのことでした。
Visual Studio 2019 までは x86 でしたが
Visual Studio 2022 からは x64 になりました。

例えば実験的に
 Windows フォーム アプリケーション (.NET Framework)
 Windows フォーム コントロール ライブラリ (.NET Framework)
の二つを含むソリューションを AnyCPU ビルドで作成し、
 Partial Public Class UserControl1
  Public Property Is64bitProcess As Boolean = Environment.Is64BitProcess
 End Class
というユーザーコントロールをビルドして、それを Form に貼ってみたところ、
このプロパティの初期値は、VS2019 では False、VS2022 では True と表示されることを確認できます。

そして、上記 2 つのプロジェクト両方を AnyCPU ビルドから x64 ビルドに変更すると
VS2022 では UserControl1 を貼れますが、VS2019 では
『ツールボックス アイテム 'UserControl1' の読み込みに失敗しました。』
と表示されて貼れなくなります。

サポートされていないのはフォームデザイナだけなので、Form1.designer.vb 上に
UserControl1 の生成コードを手動で書いておくなどすれば、一応コンパイルもできますし、
実行させることもできるのですけれどね。


そしてその逆に、これらを x86 ビルドに切り替えた場合には、VS2019 では動作しますが
VS2022 では、既定ではこのコントロールをフォームで扱えない状態となります。

そこで救済措置として、VS2022 バージョン 17.9 以降で 32bit コントロールの限定サポートが追加されました。
x86 コントロールを貼ったフォームをフォームデザイナで開く際に
『Visual Studio は 32 ビット アセンブリ 'WindowsControlLibrary1.dll' を読み込めません。
 'WindowsApp1' プロジェクトに Windows フォームのプロセス外デザイナーを使用しますか?』
という選択肢が現れ、ここで「はい」と答えると、.NET Framework プロジェクトの
Windows フォーム アウトプロセス デザイナー が起動され、32 bit プロセスのデザイナーを呼び出せます。

このアウトプロセス デザイナーは、VS2022 のオプション設定で指定できます。
[ツール]>[オプション] の [環境]>[プレビュー機能] の下に、下記のチェックボックスがあります
・.NET アプリのプレビュー版 Windows Forms アウトプロセス デザイナーを使用する(再起動が必要)
・Windows フォーム .NET Framewrok プロジェクトの 32 ビット アセンブリ読み込みエラーを検出する(再起動が必要)
https://github.com/dotnet/winforms/blob/main/docs/designer/designer-selection.md
https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/visualstudio/troubleshoot-32bit?WT.mc_id=DT-MVP-8907&view=netdesktop-9.0


なおアウトプロセスデザイナーは、サードパーティー製品のライセンス情報を正しく読み取れない可能性があるそうです。ご注意ください。
https://support.mescius.jp/hc/ja/articles/9810848245263
引用返信 編集キー/
■103625 / inTopicNo.4)  Re[2]: x64プロジェクトでカスタムコントロールを使う
□投稿者/ のの (2回)-(2025/03/30(Sun) 17:34:31)
ありがとうございます。

解決しました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ