gpt4 book ai didi

c# - 自定义 AppDomain 和 PrivateBinPath

转载 作者:太空狗 更新时间:2023-10-29 17:34:29 26 4
gpt4 key购买 nike

我正在使用 c# 4.0 和一个控制台应用程序只是为了测试,下面的代码确实给出了一个异常。

AppDomainSetup appSetup = new AppDomainSetup()
{
ApplicationName = "PluginsDomain",
ApplicationBase = AppDomain.CurrentDomain.BaseDirectory,
PrivateBinPath = @"Plugins",
ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
};

AppDomain appDomain = AppDomain.CreateDomain("PluginsDomain", null, appSetup);

AssemblyName assemblyName = AssemblyName.GetAssemblyName(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins", "sample.dll"));

Assembly assembly = appDomain.Load(assemblyName); //This gives an exception of File not found

AppDomain.Unload(appDomain);

在我创建的 AppDomain 上使用 Load 时,我一直收到找不到文件的异常。

谢谢。

最佳答案

我在尝试从 bin 目录之外的目录动态加载 dll 文件时遇到了这个线程。长话短说,我能够通过使用 AppDomain.CurrentDomain.AssemblyResolve 事件来完成此操作。这是代码:

//--begin example:

public MyClass(){
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}

private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
foreach (var moduleDir in _moduleDirectories)
{
var di = new DirectoryInfo(moduleDir);
var module = di.GetFiles().FirstOrDefault(i => i.Name == args.Name+".dll");
if (module != null)
{
return Assembly.LoadFrom(module.FullName);
}
}
return null;
}

//---end example

每次调用 AppDomain.CurrentDomain.Load("...") 方法时都会调用方法 CurrentDomain_AssemblyResolve。这个自定义事件处理程序使用您自己的自定义逻辑来完成定位程序集的工作(这意味着您可以告诉它查找任何地方,甚至在 bin 路径之外等)。我希望这能为其他人节省几个小时...

关于c# - 自定义 AppDomain 和 PrivateBinPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6626647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com