- PR -

exeファイルで自分が参照しているdllファイルをコピー

投稿者投稿内容
hana
会議室デビュー日: 2004/04/20
投稿数: 6
投稿日時: 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を参照しなければ、新たに作成する部分が多くなってしまいます。

なにか解決方法があればご教授願います。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-20 14:04
こんにちは。

解決方法というより、設計にミスがあるような。。

それはいいとして、AA.exeからBB.dll使うときは
必要なときだけロードし、使ったら開放というやり方で
ようは動的にBB.dllを使うということですね。
これで、自由にBB.dllを操れます。

って、そういうことではないのかな?


_________________
hana
会議室デビュー日: 2004/04/20
投稿数: 6
投稿日時: 2004-04-20 14:12
さっそくのお返事ありがとうございました!!

「動的にBB.dllを使う」とは、具体的にどのようなコードになるのでしょうか?
初心者で申し訳ありません。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-04-20 14:28
引用:

hanaさんの書き込み (2004-04-20 14:12) より:
「動的にBB.dllを使う」とは、具体的にどのようなコードになるのでしょうか?


水をさすようで恐縮ですが….NET Frameworkでは、DLL(アセンブリ)の動的な「解放」はできません。アプリケーションドメインごとアンロードする必要があります、が、多分そんなことまではしないだろうと思われます(たぶん望みどおりのことは簡単にはできないので)。

シャドウファイルを使おうと思っても、これもアプリケーションドメインを自分で操作(作成管理)しないと無理ですよね、確か(もし違ったら指摘お願いします)。

私も何かいい方法があるなら知りたんですけどね…

--追記
あ、ひょっとしたら、LoadFromでコードベースを指定して読み込めばできるのかも…
※思い付きです、全然でたらめ言ってるかもしれません。

[ メッセージ編集済み 編集者: なちゃ 編集日時 2004-04-20 14:56 ]
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-04-20 14:41
引用:

なちゃさんの書き込み (2004-04-20 14:28) より:
水をさすようで恐縮ですが….NET Frameworkでは、DLL(アセンブリ)の動的な「解放」はできません。アプリケーションドメインごとアンロードする必要があります、が、多分そんなことまではしないだろうと思われます(たぶん望みどおりのことは簡単にはできないので)。

シャドウファイルを使おうと思っても、これもアプリケーションドメインを自分で操作(作成管理)しないと無理ですよね、確か(もし違ったら指摘お願いします)。

私も何かいい方法があるなら知りたんですけどね…


こんにちは。

あれ?そうでしたっけ?アセンブリの作り方にもよるのでは?
今、ちょっと試せる環境がないので、なんともいえません。

_________________
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-20 14:54
 おそらくやりたいことは、自分で自分をアップグレードする、と言うことですよね。


アップデート用のプログラムUPG.EXEと、実際のアプリケーションAPL.EXEを用意する
APL.EXEが起動すると、更新版があるかチェックする
更新版がなければ続行
更新版があれば、UPG.EXEをフォークして終了
UPG.EXEは更新版をダウンロードし、APL.EXEを上書き更新する
UPG.EXEはAPL.EXEをフォークして終了


と言うシナリオはどうでしょう?
m.ku
大ベテラン
会議室デビュー日: 2002/09/15
投稿数: 184
投稿日時: 2004-04-20 16:23
Visual Studio .NETでセットアップ パッケージを作成すれば
その手の制御は勝手にやってくれると思うけど、それは使わずにって
ことなのかな? もし未検討なら見てみるといいかもしれません。
hana
会議室デビュー日: 2004/04/20
投稿数: 6
投稿日時: 2004-04-21 16:40
みなさん丁寧な回答ありがとうございました。

Visual Studio .NETのセットアップ パッケージは
使わない方法でいきたいと思ってます。

AppDomainとかAssemblyとかいろいろ手をつくせそうで、
今一歩完全な解決法に行き着くのは難しそうですね。

アプリケーションドメインを新たにつくって、AA.exeが
動的にdllを参照するようなことをやってみたんですが、
アセンブリのバージョンが違うとかで実行時エラーでてしまいますし。。
(見当違いなことやってるかもしれませんね(^^;;)
もう少し粘ってみて最終的にはJittaさんが提案してくださった方法に
なるかもしれません。

ありがとうございました。


スキルアップ/キャリアアップ(JOB@IT)