.net frameworkで実行ファイルとは別のフォルダのDLLを参照する方法

http://d.hatena.ne.jp/tekk/20110403/1301829578
https://msdn.microsoft.com/ja-jp/library/ms973920.aspx
基本的に.net frameworkのプログラムがDLLを検索するのは実行ファイルと同じフォルダとそのグローバルアセンブリキャッシュ(GAC)のフォルダだが、「プログラム名.exe.config」というファイルを作成して以下のような内容を設定すれば、実行ファイル下のdllフォルダも検索対象になる。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="dll"/>
      </assemblyBinding>
   </runtime>
</configuration>

また、拡張子を除いた実行ファイル名と同じフォルダは上の設定をしなくても自動でDLL検索対象になる。



プログラム側で任意のフォルダのDLLを読み込むことも可能だが、バージョン問題などに問題が出る可能性がある。
http://tiri-tomato.hatenadiary.jp/entry/20130511/1368268606
http://d.hatena.ne.jp/masa_m/20130108/1357644226

static class Program
{
	static void Main(string[] args)
	{
		AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
		using (Game1 game = new Game1())
		{
			game.Run();
		}
	}
	static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
	{
		return System.Reflection.Assembly.LoadFrom("asm/" + new System.Reflection.AssemblyName(args.Name).Name + ".dll");
	}
}