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

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

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

Re[4]: クラスライブラリが参照しているDLLがなかった場合


(過去ログ 172 を表示中)

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

■99286 / inTopicNo.1)  クラスライブラリが参照しているDLLのバージョンが異なる場合
  
□投稿者/ やんちゃ (1回)-(2022/03/03(Thu) 10:57:02)

分類:[C#] 

2022/03/03(Thu) 11:10:32 編集(投稿者)
2022/03/03(Thu) 11:10:04 編集(投稿者)

.netでmain.dll(仮名)の開発をしています。
main.dll は、他社から販売されている.netで開発されたSub.dll(仮名)を参照しています。

アプリケーションからmain.dllを使用するとき
(1)main.dllをビルドしたとき参照していたSub.dll
(2)アプリケーション動作時、アプリケーションと同一フォルダに置いたSub.dll
上記2つのSub.dllのバージョンが異なるとSystem.IO.FileNotFoundExceptionのエラーが発生してしまいます。

このエラーを回避、またはtry chatch で捕まえる方法はあるでしょうか?

よろしくお願いいたします。

引用返信 編集キー/
■99287 / inTopicNo.2)  Re[1]: クラスライブラリが参照しているDLLがなかった場合
□投稿者/ Hongliang (1219回)-(2022/03/03(Thu) 11:13:13)
アセンブリのロードに失敗した際、AppDomainクラスのAssemblyResolveイベントが発生します。
回避っていうのはどういう挙動を要求しているのでしょうか。想定外のバージョンのDLLであれば動作を保証できないものと考えられるので、アプリを停止するのは妥当だと思われますが。
引用返信 編集キー/
■99288 / inTopicNo.3)  Re[2]: クラスライブラリが参照しているDLLがなかった場合
□投稿者/ やんちゃ (4回)-(2022/03/03(Thu) 11:24:55)
No99287 (Hongliang さん) に返信
> アセンブリのロードに失敗した際、AppDomainクラスのAssemblyResolveイベントが発生します。
> 回避っていうのはどういう挙動を要求しているのでしょうか。想定外のバージョンのDLLであれば動作を保証できないものと考えられるので、アプリを停止するのは妥当だと思われますが。

回答ありがとうございます。
回避とは、
1.バージョン違いでも動作できるようにする(良し悪しは別にしてCのDLLなんかは同様のエラーは起きないですよね?)
2.main.dllでバージョン不一致を検知してエラーを表示する

この2通りのどちらかを実現させたいのです。
引用返信 編集キー/
■99289 / inTopicNo.4)  Re[2]: クラスライブラリが参照しているDLLがなかった場合
□投稿者/ radian (19回)-(2022/03/03(Thu) 11:30:46)
2022/03/03(Thu) 11:48:30 編集(投稿者)

単なるバージョン違いだと、違うエラーメッセージ出そうな気がしますけどね。
https://docs.grapecity.com/help/secureftp-dotnet-4/DistributionTroubleShooting.html
販売元に確認してみては?

フレームワーク何使ってるか記載されていないので使えるか知りませんが、
バージョンが違うだけならこういうのもあります。
[アセンブリ バージョンのリダイレクト]
https://docs.microsoft.com/ja-jp/dotnet/framework/configure-apps/redirect-assembly-versions
ただ、今回のエラーメッセージは依存ファイルそのものが見つからない
もののように見受けられるので、解消出来ないと思います。
引用返信 編集キー/
■99291 / inTopicNo.5)  Re[3]: クラスライブラリが参照しているDLLがなかった場合
□投稿者/ 魔界の仮面弁士 (3303回)-(2022/03/03(Thu) 11:43:52)
No99288 (やんちゃ さん) に返信
> 良し悪しは別にしてCのDLLなんかは同様のエラーは起きないですよね?

バージョン不整合によって、「ファイルが見つかりません」相当の
エラーとなるという状況は、.NET のマネージ DLL だけでなく、
アンマネージの DLL でも起きえますよ。いわゆる "DLL Hell" の一種ですね。

たとえばバージョンによって、その DLL が内部で参照している
依存コンポーネントのファイル名が変化していた場合などです。

メッセージ上では、どの依存ファイルが不足していていたのかが分からないので、
Dependencies あるいは Dependency Walker で確認したりしていました。
引用返信 編集キー/
■99316 / inTopicNo.6)  Re[4]: クラスライブラリが参照しているDLLがなかった場合
□投稿者/ PATIO (27回)-(2022/03/11(Fri) 16:01:15)
No99291 (魔界の仮面弁士 さん) に返信
> ■No99288 (やんちゃ さん) に返信
>>良し悪しは別にしてCのDLLなんかは同様のエラーは起きないですよね?
>
> バージョン不整合によって、「ファイルが見つかりません」相当の
> エラーとなるという状況は、.NET のマネージ DLL だけでなく、
> アンマネージの DLL でも起きえますよ。いわゆる "DLL Hell" の一種ですね。
>
> たとえばバージョンによって、その DLL が内部で参照している
> 依存コンポーネントのファイル名が変化していた場合などです。
>
> メッセージ上では、どの依存ファイルが不足していていたのかが分からないので、
> Dependencies あるいは Dependency Walker で確認したりしていました。

DLLを使うと言語に関わらず発生する可能性はあると思います。
これを避けるにはスタティックリンクするくらいしかないです。
そもそもEXEとDLLでファイルが分かれている以上は起こりえる話です。
どちらかと言うと運用管理とか形態管理とかそっちの問題のような気がします。
正常な動作を望めない状態できちんとしたエラー表示をしろというのも酷な話かと。
改善すべきはそこじゃないような気がします。
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -