4

私はwinform c#アプリを持っています。

[Web メソッド] を使用して、クライアントの winform が使用する必要がある DLL のバージョンを確認できます。ダウンロードもできます。しかし、古い DLL をコピーすると、ファイルが使用中であるというエラーが表示されます。私はこれを期待していました。

実行中の winform アプリからこの DLL をアンロードし、DLL をコピーして再ロードする方法はありますか?

アップデーターにブートストラップを使用したくないので、アプリケーションを停止して再起動する必要があるかもしれません。

DLL をアンロードできれば、これはすべて時代遅れになります。

私は長い間探しましたが、何も見つかりません。これで引退する前に、ここに質問を投稿すると思いました。

ありがとう

PSコードでDLLをロードする方法とそれから生成されたエラーを示すコードを投稿できますが、それはオープンな知識であり、この質問には追加されません。

4

2 に答える 2

6

実行中の winform アプリからこの DLL をアンロードし、DLL をコピーして再ロードする方法はありますか?

ほとんどの場合ではありません。マネージ アプリケーションで DLL をアンロードする唯一の方法は、AppDomain 全体をアンロードすることです。これは通常、アセンブリの使用方法に非常に注意する必要があることを意味します (アセンブリを直接参照して通常どおり使用することはできません)。

アップデーターにブートストラップを使用したくないので、アプリケーションを停止して再起動する必要があるかもしれません。

これは最も一般的なアプローチです。アプリケーション内でこれを機能させるには、基本的に、ブートストラップをアプリケーション自体 (独自の AppDomain 内) に組み込み、アセンブリを使用して AppDomain をアンロード/再起動します。これは通常、より多くの作業を必要とし、別のブートストラッパー アプリケーションと同じくらい混乱を招きます。

于 2013-11-11T18:46:47.763 に答える