2016-09-12 27 views
-1

AnyCPUとして構築されたカスタムコントロール、テーマ、スタイルなどを含むWP30 DLLプロジェクトがあります。C#DLLの実行時に動的に依存関係を解決する

ネイティブのAnyCPUをサポートしていないオープンソースのWebブラウザコントロールに依存していますが、別のx86/x64アセンブリがあります。

EXEでは、かなり簡単です。私は64ビットプロセスのAppDomain.CurrentDomain.AssemblyResolveイベントチェックを処理し、適切なアセンブリを持つAssembly.LoadFileを実行できます。

DLLプロジェクトで実行時の依存関係を動的に解決するにはどうすればよいですか?

+0

私の質問は、あなたもする必要がありますか? DLLプロジェクトをEXEプロジェクトの参照として追加し、サードパーティのDLLの動的アセンブリ解決を行うことができますか?やってみました?エラーはありますか? – Zack

+0

また、DLLプロジェクトをx86とx64としてビルドし、動的にロードするだけでもいいかもしれません...私は動的な解像度に関する多くの経験がないので、解決方法を考えようとしています。 – Zack

+0

お試しくださいhttp://stackoverflow.com/questions/108971/using-side-by-side-assemblies-to-load-the-x64-or-x32-version-of-a-dll/156024#156024とhttp: //stackoverflow.com/questions/2963809/anycpu-x86-x64-for-c-sharp-application-and-its-c-cli-dependency – neohope

答えて

-1

私はこの問題を熟考していました。

私のWPF DLLには、オープンソースのWebブラウザコントロールを使用しているカスタムコントロールクラスがあります。

カスタムコントロールの静的コンストラクタでは、AppDomain.CurrentDomain.AssemblyResolveイベントのハンドラをセットアップしました。

そして、私のハンドラのために:ハンドラで

private static Assembly Resolver(object sender, ResolveEventArgs args) 
    { 
     if(args.Name.StartsWith("CefSharp")) 
     { 
      string assemblyName = args.Name.Split(new[] { ',' }, 2)[0] + ".dll"; 
      string archSpecificPath = Path.Combine(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "CefSharp", Environment.Is64BitProcess ? "x64" : "x86", assemblyName); 
      return File.Exists(archSpecificPath) ? Assembly.LoadFile(archSpecificPath) : null; 
     } 

     return null; 
    } 

私はCefSharpアセンブリが解決されているかどうかをチェックし、もしそうなら、私のアセンブリが実行されている場合、私はに基づいて適切なアセンブリへのパスを作成64ビットプロセスで実行するかどうかを決定し、Assembly.LoadFile()を実行します。

私はこれが役に立ちそうです!

関連する問題