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) でビルドすることにしました。