別の C# DLL を使用する C# アプリケーションがあります。exeファイルを使用すると、DLLファイルがexeファイルと同じディレクトリにあるときに機能します。ただし、フォルダーを作成し、その中に dll ファイルを配置することを知っています。MSDN ヘルプで動作するはずの何かが見つかりましたが、理由はありませんか?
サブフォルダーから DLL をロードするにはどうすればよいですか?
dll をロードするフォルダーを構成ファイルに追加する必要があります。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="YourSubFolderHere;SubFolderTwo"/>
</assemblyBinding>
</runtime>
または、次のコードを使用して実行できます。
AppendPrivatePath
msdnのプローブ パスの詳細
より柔軟性が必要な場合は、自分で解決するアセンブリを簡単に処理できます。このようにして、ロードされるコードを完全に制御できます。これが私のプロジェクトの1つからのコードです。
'new AssemblyName(args.Name)' は、必要なアセンブリに関する情報を取得するために使用できるオブジェクトを提供します。コードの残りの部分は、埋め込みファイルからアセンブリを読み込みます。サブフォルダーからアセンブリをロードする場合は、Assembly.Load() を使用できます。
private static void InstallAssemblyResolveHandler()
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
String resourceName = "AssemblyLoadingAndReflection." +
new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
}