2011-07-02 14 views
4

.NETは動的にコンパイルされたメモリアセンブリによって参照されるアセンブリをどのように解決しますか?.NET - 既にロードされているアセンブリのファイルまたはアセンブリをロードできませんでした

私はRazorビューエンジンをホストしており、そのビューをオンザフライでコンパイルするために使用していますが、メインプロジェクトのアセンブリ を参照することに問題があります。私はプロジェクトのアセンブリへの参照を追加し、コンパイルパラメータには、このような何か:

// Add references to all currently loaded assemblies 
foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    compileParams.ReferencedAssemblies.Add(a.Location); 
} 

コードはあまりにも長い間、私はプロジェクトのDLLのいずれかの種類参照しないように、コンパイルし、正常に動作 - 場合はIを私はダブルチェックしました。このアセンブリはすでに例外がスローされた時点でロードされている

Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

:以下 エラーが発生します。私は何が欠けていますか?

+0

アセンブリの公開鍵トークンはどこにありますか?これらを手動で設定ファイルまたはIDEに追加していますか? –

+0

私は符号付きアセンブリと符号なしアセンブリの両方を試しましたが、違いはありません。 –

答えて

1

コードからは、動的にコンパイルされたメモリ内アセンブリをホストする別のAppDomainを作成しているように見えます。

動的にコンパイルされたアセンブリが、あなたのメインアプリケーションではないアセンブリを参照している可能性があります。例外をReflectionTypeLoadExceptionにキャストし、LoaderExceptionsを確認することがヒントを提供しないかどうかを確認してください。

+0

実際、これはすべて1つのアプリドメインにありません –

+0

LoaderExceptionsをチェックしてみましたか? –

2

メインプロジェクトは、別のディレクトリにあるexeによって読み込まれたDLLです。 .NETアセンブリローダは、デフォルトではexeディレクトリを検索しますが、dllのディレクトリは検索しません。プロジェクトDLLのフォルダを検索するAppDomain.CurrentDomain.AssemblyResolveイベントで解決しました。

+0

LoadFileを使用していますか?しないでください、それは悪です。 –

関連する問題