2012-03-06 13 views
2

リフレクションを使用してアセンブリを取得すると、アセンブリを検索してキャッシュします。アセンブラを見つけられなかった場合、正しい場所に追加してもアセンブリを見つけることができないため、これを伝えることができます。アセンブリを見つけてそれを取り除くと、見つかってキャッシュされたアセンブリが引き続き使用されます。.NETのリフレクションキャッシュをクリアするにはどうすればよいですか?

私はこの問題に持っているだけではないよ知っている:Clear .Net Reflection cache

私はアセンブリを取得するために使用しているコードは次のようである - そして私は、このコールするたびに(自分自身をキャッシュしない)します。

// Try to get the assembly referenced. 
Assembly reflectedAssembly; 
try 
{ 
    reflectedAssembly = Assembly.Load(assembly); 
} 
catch (FileNotFoundException) 
{ 
    errorMessage = string.Format("Could not find assembly '{0}'", assembly); 
    result = null; 
    return false; 
} 

私が知りたいことは、プロセスを再起動せずにリフレクションキャッシュをクリアする方法がある場合です。どんな助けでも大歓迎です。

ありがとうございます!

+0

'Assembly.LoadFrom'は多分使用しますか? –

+0

Assembly.Loadに何を渡していますか?文字列?バイト配列? AssemblyNameインスタンス? – Fernando

+0

@フェルナンド - 「ClassLibrary1、Version = 1.0.0.0、Culture = Neutral、PublicKeyToken = d48aa85d4ceaf047」 – zimdanen

答えて

4

.NETでアセンブリをアンロードすることはできませんが、アセンブリをロードするアプリケーションドメインをシャットダウンすることはできます。

+3

完全には正しくありません。アンロードできる特別な種類のアセンブリがあります。しかし、ファイルからロードされたアセンブリをアンロードすることはできません。 http://msdn.microsoft.com/en-us/library/dd554932.aspx AppDomains間で共有される方法でアセンブリを読み込むこともできます。そのうちの1つをアンロードしただけでアンロードされないようにすることもできます。 – CodesInChaos

+0

"アセンブリの読み込みReflect emitは、収集可能なアセンブリの読み込みでサポートされている唯一のメカニズムです。他の形式のアセンブリ読み込みによって読み込まれたアセンブリはアンロードできません。 リンク先の記事から。したがって、アンロードするには、アセンブリを動的に生成する必要があります。 お返事ありがとうございます - 私がやろうとしていることはできません。 – zimdanen

+0

アンロードの概念は、一度もロードされなかったものをロードする概念とは少し異なります。一度失敗した場合、キャッシュは再度ロードしようとしません。 (おそらく、同じコンセプトの一部ですが、それが何であるかに関係なく操作の結果を保持することになります)。 – zimdanen

関連する問題