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

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

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

C#で作成したDLLをvb.netで使うとコードエラーが出る

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

■100014 / inTopicNo.1)  C#で作成したDLLをvb.netで使うとコードエラーが出る
  
□投稿者/ ぱんだ (1回)-(2022/06/29(Wed) 15:10:12)

分類:[.NET 全般] 

c#で作ったDLLをvb.netで使おうとすると、【BC30652:型[object]を含むアセンブリ['〜']への参照が必要です。参照をプロジェクトへ追加してください。】というエラーが出ます。
参照の追加はしていて参照のところにも表示されているのですが、呼び出し方のミスでしょうか?
かなり初歩的な部分で調べて色々とやっているのですが原因がわかりません。
C#に組み込むことはできたのですが、vb.netの経験が浅く初歩的な部分で進まなくなってしまったので質問させていただきました。

■DLL(c#)
クラス名 aaa
メソッド名 bbb(stringを受け取りstringを返す)

■呼び出し元(vb.net)
Imports DLL名

Dim 変数 As String = aaa.bbb("stringパラメータ")

と記述しています。





引用返信 編集キー/
■100015 / inTopicNo.2)  Re[1]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ radian (53回)-(2022/06/29(Wed) 15:29:36)
2022/06/29(Wed) 15:35:38 編集(投稿者)

No100014 (ぱんだ さん) に返信
> c#で作ったDLLをvb.netで使おうとすると、【BC30652:型[object]を含むアセンブリ['〜']への参照が必要です。参照をプロジェクトへ追加してください。】というエラーが出ます。
> 参照の追加はしていて参照のところにも表示されているのですが、呼び出し方のミスでしょうか?
> (中略)
> ■呼び出し元(vb.net)
> Imports DLL名

Importsには、DLL名ではなく、使用したいクラスを含む名前空間名を指定します。
プロジェクトにDLLの参照を既に追加しているなら、
ソリューションエクスプローラーの「参照」の所にある
追加したDLLをダブルクリックすると、
オブジェクトブラウザで、DLLに含まれる名前空間やクラスの一覧が確認出来ます。
引用返信 編集キー/
■100016 / inTopicNo.3)  Re[2]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ ぱんだ (2回)-(2022/06/29(Wed) 15:35:20)
No100015 (radian さん) に返信

ご回答ありがとうございます。

> Importsには、DLL名ではなく、使用したいクラスを含む名前空間名を指定します。
> プロジェクトにDLLの参照を既に追加しているなら、その名前をダブルクリックすると、
> オブジェクトブラウザで、DLLに含まれる名前空間やクラスの一覧が確認出来ます。

DLL名と書いてしまいましたが、DLL名と名前空間名が同じになります。
オブジェクトブラウザで、名前空間やクラスの確認はできました。


引用返信 編集キー/
■100017 / inTopicNo.4)  Re[3]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ radian (54回)-(2022/06/29(Wed) 15:40:27)
2022/06/29(Wed) 15:44:07 編集(投稿者)

No100016 (ぱんだ さん) に返信
> ■No100015 (radian さん) に返信
>
> ご回答ありがとうございます。
>
>>Importsには、DLL名ではなく、使用したいクラスを含む名前空間名を指定します。
>>プロジェクトにDLLの参照を既に追加しているなら、その名前をダブルクリックすると、
>>オブジェクトブラウザで、DLLに含まれる名前空間やクラスの一覧が確認出来ます。
>
> DLL名と書いてしまいましたが、DLL名と名前空間名が同じになります。
> オブジェクトブラウザで、名前空間やクラスの確認はできました。

もしC#で作成したDLLが別のアセンブリに依存しているのであれば、
それも参照に追加してみてください。

> c#で作ったDLLをvb.netで使おうとすると、【BC30652:型[object]を含むアセンブリ['〜']への参照が必要です。参照をプロジェクトへ追加してください。】というエラーが出ます。

で、名前が伏せられているので詳細は判りませんが、
そのエラーメッセージに参照しているアセンブリ名が表示されている筈です。
引用返信 編集キー/
■100018 / inTopicNo.5)  Re[4]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ ぱんだ (3回)-(2022/06/29(Wed) 15:50:46)
No100017 (radian さん) に返信

>>c#で作ったDLLをvb.netで使おうとすると、【BC30652:型[object]を含むアセンブリ['〜']への参照が必要です。参照をプロジェクトへ追加してください。】というエラーが出ます。
>
> で、名前が伏せられているので判りませんんが、そのエラーメッセージに参照しているアセンブリ名が表示されている筈です。

エラー内容を端折ってしまいすみません。
BC30652 型 '[Object]' を含むアセンブリ 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' への参照が必要です。参照をプロジェクトに追加してください。
と出ています。

引用返信 編集キー/
■100020 / inTopicNo.6)  Re[5]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ radian (55回)-(2022/06/29(Wed) 16:03:08)
2022/06/29(Wed) 16:04:09 編集(投稿者)

No100018 (ぱんだ さん) に返信
> ■No100017 (radian さん) に返信
>
> >>c#で作ったDLLをvb.netで使おうとすると、【BC30652:型[object]を含むアセンブリ['〜']への参照が必要です。参照をプロジェクトへ追加してください。】というエラーが出ます。
>>
>>で、名前が伏せられているので判りませんんが、そのエラーメッセージに参照しているアセンブリ名が表示されている筈です。
>
> エラー内容を端折ってしまいすみません。
> BC30652 型 '[Object]' を含むアセンブリ 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' への参照が必要です。参照をプロジェクトに追加してください。
> と出ています。
>

何となく、プロジェクトの.NETフレームワークのバージョンが噛み合ってない気が。
例えば、.NET Framework 4.x系と.NET5〜6のライブラリは互換性がありません。
C#とVB.NETのプロジェクト設定を確認してみてください。
引用返信 編集キー/
■100023 / inTopicNo.7)  Re[6]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ ぱんだ (4回)-(2022/06/29(Wed) 16:20:12)
No100020 (radian さん) に返信
> 2022/06/29(Wed) 16:04:09 編集(投稿者)
>
> ■No100018 (ぱんだ さん) に返信
>>■No100017 (radian さん) に返信
>>
>>>>c#で作ったDLLをvb.netで使おうとすると、【BC30652:型[object]を含むアセンブリ['〜']への参照が必要です。参照をプロジェクトへ追加してください。】というエラーが出ます。
> >>
> >>で、名前が伏せられているので判りませんんが、そのエラーメッセージに参照しているアセンブリ名が表示されている筈です。
>>
>>エラー内容を端折ってしまいすみません。
>>BC30652 型 '[Object]' を含むアセンブリ 'System.Runtime, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' への参照が必要です。参照をプロジェクトに追加してください。
>>と出ています。
>>
>
> 何となく、プロジェクトの.NETフレームワークのバージョンが噛み合ってない気が。
> 例えば、.NET Framework 4.x系と.NET5〜6のライブラリは互換性がありません。
> C#とVB.NETのプロジェクト設定を確認してみてください。

ご丁寧にご回答いただきありがとうございます。
vb.netのプロジェクトが少し古いものなので、ご指摘の通りフレームワークのバージョンがあっていないかも知れません。
設定を確認して調整したいと思います。
この部分だけでかなり時間がかかってしまっていたのでアドバイスいただき助かりました。
ありがとうございます。
引用返信 編集キー/
■100035 / inTopicNo.8)  Re[7]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ Azulean (1244回)-(2022/06/29(Wed) 21:11:54)
No100023 (ぱんだ さん) に返信
> vb.netのプロジェクトが少し古いものなので、ご指摘の通りフレームワークのバージョンがあっていないかも知れません。
> 設定を確認して調整したいと思います。


ちなみに、.NET Framework 4.x から .NET 5/6 などへの変更、およびその逆への変更は「設定の変更」というレベルでは実現できません。
プロジェクトファイルを手動で書き換えるとか、知識を持った上での対応が必要なので、基本的に「その DLL は使えない」と判断するところかと思います。

どうしてもその DLL を使うのが必須要件なのであれば、アプリ側を .NET 5/6 に移行する作業をするところですね。
(.NET 5 は VS2019 以上、.NET 6 は VS2022 以上が必要)

なお、.NET 5 Runtime はもうサポート終了しています。
引用返信 編集キー/
■100041 / inTopicNo.9)  Re[8]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ ぱんだ (5回)-(2022/06/30(Thu) 13:11:01)
No100035 (Azulean さん) に返信

> ちなみに、.NET Framework 4.x から .NET 5/6 などへの変更、およびその逆への変更は「設定の変更」というレベルでは実現できません。
> プロジェクトファイルを手動で書き換えるとか、知識を持った上での対応が必要なので、基本的に「その DLL は使えない」と判断するところかと思います。

ご回答ありがとうございます。
vb.netのターゲットフレームワークが.NET Framework 4 Client Profile
C#のDLLのターゲットフレームワークが.NET5.0
になります。
フレームワークを変えたりして色々やってみましたが、ビルドは通るようになるけど動かすと別の場所でエラーが発生してしまったりしています。
フレームワークは今まで指示されたものを設定していただけなので、知識はありません。
vb.netのフレームワークを.NET Framework 4.7.2へあげる
.NET Framework 4.7.2をインストールしてC#のDLLを.NET Framework 4.7.2で作り直してコンパイル
という方法でも難しいでしょうか?

引用返信 編集キー/
■100043 / inTopicNo.10)  Re[9]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ radian (57回)-(2022/06/30(Thu) 14:12:44)
No100041 (ぱんだ さん) に返信
> vb.netのフレームワークを.NET Framework 4.7.2へあげる
> .NET Framework 4.7.2をインストールしてC#のDLLを.NET Framework 4.7.2で作り直してコンパイル
> という方法でも難しいでしょうか?

C# 8.0以上の構文を使用していなければ、おそらくそれでも行けると思います。
コンパイルエラーになるなら、C#ソース側の修正が必要かもしれません。
引用返信 編集キー/
■100044 / inTopicNo.11)  Re[9]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ 魔界の仮面弁士 (3421回)-(2022/06/30(Thu) 14:16:52)
No100041 (ぱんだ さん) に返信
> vb.netのフレームワークを.NET Framework 4.7.2へあげる
> .NET Framework 4.7.2をインストールしてC#のDLLを.NET Framework 4.7.2で作り直してコンパイル
> という方法でも難しいでしょうか?

DLL 側のライブラリと EXE 側のライブラリを揃えましょう。

C# DLL が .NET (.NET Core) の場合、VB EXE 側も .NET にする必要があります。
C# DLL が .NET Framework の場合は、VB EXE 側も .NET Framework にします。
C# DLL が .NET Standard の場合は、VB EXE 側は .NET Framework でも .NET でも構いません。
(.NET Standard 対応の DLL を作成するには、ある程度の知識が求められるため、経験が浅い時点ではお奨めしません)



ところで、4.7.2 を選択されたのは何故でしょうか?

Windows 10 (1903 以降) や Windows 11 は、既定で .NET Framework 4.8 を搭載しています。
Windows 10 (1803/1809) が .NET Framework 4.7.2 世代でしたが、現時点において
Windows 10 21H2 未満のバージョンは既にサポートを終了しているため、
必然的に、.NET Framework 4.8 一択ということになります。

Windows 8.1 だと .NET Framework 4.5.1 以上が搭載されているのですが、
.NET Framework 4.6.2 未満のサポートは終了しています。Windows 8.1 のサポートは
来年 1 月までなので、現状ではさほど気にしなくても良いかも。


ただし Windows Server で使う場合は、サーバー管理者と相談してください。
たとえばサーバーを再起動したくないといった運用上の都合で、最新版が導入されて
いないなどの理由で、あえて古いバージョンの .NET Framework が必要とされるケースがあります。


そういった特別な事情が無い場合は、個人的には 4.8 をお奨めします。
Visual Studio の選択肢に .NET Fraemwork 4.8 が現れない場合は、下記を参照してみてください。
https://www.curict.com/item/83/8390a94.html
https://dotnet.microsoft.com/ja-jp/download/dotnet-framework/net48
引用返信 編集キー/
■100045 / inTopicNo.12)  Re[10]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ 魔界の仮面弁士 (3422回)-(2022/06/30(Thu) 14:32:02)
No100044 (魔界の仮面弁士) に追記
> そういった特別な事情が無い場合は、個人的には 4.8 をお奨めします。

言葉が足りなかったので補足。

.NET Framework を選択するのであれば、4.8 を推奨…という意味です。
現状の C# DLL が .NET なら、VB EXE 側を .NET にするという方向でも OK ですね。



ただし .NET と .NET Framework では、サポート サイクルが異なるため、
バージョン選定には注意が必要です。

.NET Framework 4.8 のサポート期限は、その OS のサポート期限に従います。
Window Server 2019 で使うなら 2029/01/09 までのサポートとなりますし、
Window Server 2022 で使うなら 2031/10/14 までのサポートといった具合です。


ところが .NET の場合は事情が変わります。
.NET 6 / .NET 8 などの偶数バージョンは 3 年間
.NET 5 / .NET 7 などの奇数バージョンは 1 年半
というサイクルとなっており、.NET Framework よりもサイクルが短く設定されています。
https://dotnet.microsoft.com/ja-jp/platform/support/policy/dotnet-core


サポート期限が切れたからと言って、突然使えなくなったりはしないですが、
未サポートのまま使い続けるのは、望ましいものでは無いですよね。
引用返信 編集キー/
■100054 / inTopicNo.13)  Re[9]: C#で作成したDLLをvb.netで使うとコードエラーが出る
□投稿者/ Azulean (1245回)-(2022/07/01(Fri) 06:58:51)
No100041 (ぱんだ さん) に返信
> .NET Framework 4.7.2をインストールしてC#のDLLを.NET Framework 4.7.2で作り直してコンパイル
> という方法でも難しいでしょうか?

阻害しうる要因は以下が考えられますね。

・C# のソースコードの書かれ方(C# の言語バージョン)
・C# 側のライブラリの利用状況(.NET Framework に存在しないクラス・メソッドの利用、.NET Framework をサポートしない NuGet 由来のライブラリ利用)

理解して同等コードに置き換えていくことを続けていけばいずれは解決するかもしれませんが、「少しの手間で済む」か「作り直すレベルで手間がかかる」かは、その C# のソースコード次第。
そして、あなたの技量次第。
引用返信 編集キー/

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


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

このトピックに書きこむ