2011-08-15 14 views
0

0バイトのapplication_name.exeを作成してDLLの依存性を気にすることなく、新しいバージョンのアプリケーションを含むフォルダ内の.localファイルただし、C#に移行する必要があり、この手法はもはや機能しません。 C#dllが現在のフォルダを最初に確認してから、アプリケーションのデフォルトの場所で他のdllを追跡するために、(.localファイル以外の)何かが必要ですか?DllリダイレクトがC#でドットローカルファイル(appname.exe.local)を処理するために動作しない

+0

AppDomain.AssemblyResolveイベントにアタッチし、アセンブリを読み込む方法を教えてください。 – Tejs

+0

これは、同じディレクトリでのみ表示されるCOMです。前に使ったのと同じ種類のCOM。何か他の問題でなければなりません。 COMサーバーはまだ登録する必要があります。実際にC#を使用してCOMサーバーを再実装している場合は、これは機能しなくなります。アセンブリはCOMによって読み込まれず、c:\ windows \ system32 \ mscoree.dllによって読み込まれます。 Googleの「reg-free COMマニフェスト」 –

答えて

0

Tejsが示唆するように、いつでもAppDomain.AssemblyResolveイベントにフックすることができます

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 

... 

public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    Assembly AlreadyLoaded=AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.FullName == args.Name); 
    if(AlreadyLoaded==null) 
     return Assembly.LoadFile(Path to corresponding DLL); 
} 

それは(あなたが検索したいものは何でもディレクトリにDLLをロードし、Assembly.LoadFileを交換する必要があるかもしれません完璧ではありませんこれらのDLLの検索ではライン)、しかしあなたはそれを動作させるために変更できるはずです。とにかくうまくいけば。

関連する問題