SxS (side-by-side) アセンブリと interop サービスの問題
追記: 一応原因が判明しました。こちらをご覧ください。.NET Framework 2.0 かそれ以前のバージョンで問題が発生するように見えます。
どうも解決できない問題に遭遇。VC++ 2005 でビルドした DLL を System.Runtime.InteropServices の DllImport を使ってインポートしようとすると、次のようなエラーが出てしまいます。
ハンドルされていない例外: System.DllNotFoundException: DLL 'xpdotnet.dll' を読み 込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x800700 7E) 場所 test.Marshaller_StartXPCOM(IntPtr& srvmgr, IntPtr& infomgr) 場所 test.Main()
depends で追っかけてみると、どうやら msvcr80.dll が見つからない様子。マニフェストファイルを含めてやらないとだめかと思って mt で
c:\...> mt -manifest xpdotnet.dll.manifest -outputresource:xpdotnet.dll;#1
などとして RT_MANIFEST つきの DLL を生成し depends で確かめると確かに適切な msvcr80.dll は見つけることができているのに、interop からは依然読み込めず。
これは interop サービスのバグなんじゃないかという気がしてきた。仕方ないので VC.NET (VC7) でビルドすることにしました。