- - PR -
exeファイルで自分が参照しているdllファイルをコピー
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-04-20 13:51
初投稿です。
現在C#でWindowsアプリケーションの開発をしています。 しかし、.exeで自分が参照しているdllファイルをコピー できないか試行錯誤しています。 AA.exeは、BB.dllをプロジェクト参照しています。 AA.exeファイルの処理は、 BB.dllファイルが古くなったときに、新しいBB.dllファイルを上書きコピーします。 当然、AA.exeがBB.dllを使用しているためファイル競合でコピーエラーします。 AA.exeをどのプロジェクトにも非依存にして作成すればよいのですが、 AA.exeがBB.dllを参照しなければ、新たに作成する部分が多くなってしまいます。 なにか解決方法があればご教授願います。 | ||||
|
投稿日時: 2004-04-20 14:04
こんにちは。
解決方法というより、設計にミスがあるような。。 それはいいとして、AA.exeからBB.dll使うときは 必要なときだけロードし、使ったら開放というやり方で ようは動的にBB.dllを使うということですね。 これで、自由にBB.dllを操れます。 って、そういうことではないのかな? _________________ | ||||
|
投稿日時: 2004-04-20 14:12
さっそくのお返事ありがとうございました!!
「動的にBB.dllを使う」とは、具体的にどのようなコードになるのでしょうか? 初心者で申し訳ありません。 | ||||
|
投稿日時: 2004-04-20 14:28
水をさすようで恐縮ですが….NET Frameworkでは、DLL(アセンブリ)の動的な「解放」はできません。アプリケーションドメインごとアンロードする必要があります、が、多分そんなことまではしないだろうと思われます(たぶん望みどおりのことは簡単にはできないので)。 シャドウファイルを使おうと思っても、これもアプリケーションドメインを自分で操作(作成管理)しないと無理ですよね、確か(もし違ったら指摘お願いします)。 私も何かいい方法があるなら知りたんですけどね… --追記 あ、ひょっとしたら、LoadFromでコードベースを指定して読み込めばできるのかも… ※思い付きです、全然でたらめ言ってるかもしれません。 [ メッセージ編集済み 編集者: なちゃ 編集日時 2004-04-20 14:56 ] | ||||
|
投稿日時: 2004-04-20 14:41
こんにちは。 あれ?そうでしたっけ?アセンブリの作り方にもよるのでは? 今、ちょっと試せる環境がないので、なんともいえません。 _________________ | ||||
|
投稿日時: 2004-04-20 14:54
おそらくやりたいことは、自分で自分をアップグレードする、と言うことですよね。
アップデート用のプログラムUPG.EXEと、実際のアプリケーションAPL.EXEを用意する APL.EXEが起動すると、更新版があるかチェックする 更新版がなければ続行 更新版があれば、UPG.EXEをフォークして終了 UPG.EXEは更新版をダウンロードし、APL.EXEを上書き更新する UPG.EXEはAPL.EXEをフォークして終了 と言うシナリオはどうでしょう? | ||||
|
投稿日時: 2004-04-20 16:23
Visual Studio .NETでセットアップ パッケージを作成すれば
その手の制御は勝手にやってくれると思うけど、それは使わずにって ことなのかな? もし未検討なら見てみるといいかもしれません。 | ||||
|
投稿日時: 2004-04-21 16:40
みなさん丁寧な回答ありがとうございました。
Visual Studio .NETのセットアップ パッケージは 使わない方法でいきたいと思ってます。 AppDomainとかAssemblyとかいろいろ手をつくせそうで、 今一歩完全な解決法に行き着くのは難しそうですね。 アプリケーションドメインを新たにつくって、AA.exeが 動的にdllを参照するようなことをやってみたんですが、 アセンブリのバージョンが違うとかで実行時エラーでてしまいますし。。 (見当違いなことやってるかもしれませんね(^^;;) もう少し粘ってみて最終的にはJittaさんが提案してくださった方法に なるかもしれません。 ありがとうございました。 |