トップ回答者
VistaとXPでDLLの参照先を変更する

質問
-
C#2005でVistaとXPでOSを判断してDLLを参照先を変更する方法を検討しています。
一部の機能について、XPとVistaの両方に対応するのが難しく、XP対応のDLLとVista対応のDLL
に分かれてしまいます。
参照する側でOSを判断して切り替えることは可能でしょうか。
現在、考えている方法としては
(1) アプリケーション名.exe.config を XP と Vista で別にする。
(2) machine.config を XP と Vista で別にする。
を検討していますが、プログラムで変更できる方法があれば、2重に管理する必要がないので
よいのですが。
回答
-
nasv さんからの引用 そのとおりだと思いますが。
実際はDLLは外部で作成しているため簡単に変更できません。
質問のような対応をする方法はないでしょうか?
参照先の変更というか、動作時に OS のバージョンを見て Assembly.Load するアセンブリ (DLL) を切り替えるコードを書くことになるのではないでしょうか。 インストーラで振り分けることによって対応する方法もありといえばありですね。
参照先の変更はビルドの段階で解決されていると思いますので手を加えようがないような。
むしろ動的にするなら参照ではなく、動的 Load になるような。
-
XPとVistaのサポートを考えているということは、顧客の一般的なPCで実行されると予想しますが、最初に提示された方法はどちらも危なっかしいような気がします。
nasv さんからの引用 (1) アプリケーション名.exe.config を XP と Vista で別にする。
インストール時点でXPだったとしても、いずれVistaにアップグレードする可能性があります。
そのときはXPの構成ファイルのアプリケーションがVista上で動くことになります。
nasv さんからの引用 (2) machine.config を XP と Vista で別にする。
machine.configはコンピュータ全体に適用されるファイルです。
パッケージや組み込み、自社内PCでもない限りは避けた方が無難かもしれません。
http://msdn.microsoft.com/ja-jp/library/ms229697(VS.80).aspx
手としてはじゃんぬねっとさんが提示されているアセンブリを動的に読み込む方法かなと考えます。
もちろん、動的に読み込むので依存関係が切れますし、型もコンパイル時点でチェックされなくなります。
余談
アセンブリが異なる時点で、厳密には同じ型ではないはず。
見た目が似ていれば差し替えても動くとは思いますが、内部まで厳密に一致するわけではないと考えられるので、何が起こるか分からない。テストを考えると恐ろしいなぁ…。
すべての返信
-
nasv さんからの引用 そのとおりだと思いますが。
実際はDLLは外部で作成しているため簡単に変更できません。
質問のような対応をする方法はないでしょうか?
参照先の変更というか、動作時に OS のバージョンを見て Assembly.Load するアセンブリ (DLL) を切り替えるコードを書くことになるのではないでしょうか。 インストーラで振り分けることによって対応する方法もありといえばありですね。
参照先の変更はビルドの段階で解決されていると思いますので手を加えようがないような。
むしろ動的にするなら参照ではなく、動的 Load になるような。
-
XPとVistaのサポートを考えているということは、顧客の一般的なPCで実行されると予想しますが、最初に提示された方法はどちらも危なっかしいような気がします。
nasv さんからの引用 (1) アプリケーション名.exe.config を XP と Vista で別にする。
インストール時点でXPだったとしても、いずれVistaにアップグレードする可能性があります。
そのときはXPの構成ファイルのアプリケーションがVista上で動くことになります。
nasv さんからの引用 (2) machine.config を XP と Vista で別にする。
machine.configはコンピュータ全体に適用されるファイルです。
パッケージや組み込み、自社内PCでもない限りは避けた方が無難かもしれません。
http://msdn.microsoft.com/ja-jp/library/ms229697(VS.80).aspx
手としてはじゃんぬねっとさんが提示されているアセンブリを動的に読み込む方法かなと考えます。
もちろん、動的に読み込むので依存関係が切れますし、型もコンパイル時点でチェックされなくなります。
余談
アセンブリが異なる時点で、厳密には同じ型ではないはず。
見た目が似ていれば差し替えても動くとは思いますが、内部まで厳密に一致するわけではないと考えられるので、何が起こるか分からない。テストを考えると恐ろしいなぁ…。