リフレクション

Assembly.LoadFromメソッドを利用してアセンブリを読み込む場合、アセンブリをロードした後、ファイルがロックされ、AssembleクラスにUnLoadとかリリースするメソッドが提供していません。この問題を解決するため、下記のようにAssembly.Loadメソッドを利用しファイルのByte値を読み込む方法で解決できます。

System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))

 この方法でロードする対象のアセンブリがさらに参照するアセンブリがある場合、上記のソースコードだけで、参照されているアセンブリを読み込めないエラーが発生します。AppDomainのAssemblyResolveイベントの実装によって、このエラーを回避することができます。

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
.....
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
   var refAssemblyPath =  "..\\..\\bin\\" + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
   
   return Assembly.Load(System.IO.File.ReadAllBytes(refAssemblyPath));
};


あなたのお住まいの地域で最安のブロードバンド選び

(画像の文字列を入力して下さい)

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:33:17 (1628d)

e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze