Поэтому, когда я создаю новый домен приложения, указание PrivateBinPath, похоже, работает неправильно.Я знаю, что это должна быть подпапка базы приложения.Вот пример:
public class PluginHandler : MarshalByRefObject
{
public void Launch()
{
var domainSetup = new AppDomainSetup()
{
ApplicationBase = Util.AssemblyDirectory,
PrivateBinPath = @"Plugins"
};
appDomain = AppDomain.CreateDomain(Guid.NewGuid().ToString(), null, domainSetup);
assemblyLoader = appDomain.CreateInstanceAndUnwrap
(Assembly.GetExecutingAssembly().FullName, typeof(AssemblyLoader).FullName) as AssemblyLoader;
thread = new Thread(() =>
assemblyLoader.LoadAssembly(PluginPath, ProxyBase, this));
thread.Start();
}
}
public class AssemblyLoader : MarshalByRefObject
{
private object pluginObj;
private MethodInfo pluginStop;
[HandleProcessCorruptedStateExceptions]
public bool LoadAssembly(string path, CoreBase proxyBase, PluginHandler pluginHandler)
{
var assembly = Assembly.Load(File.ReadAllBytes(path));
var types = assembly.GetTypes().Where(x => x.IsSubclassOf(typeof(Core))).ToArray();
for (int i = 0; i < types.Length; i++)
{
FieldInfo coreBase = types[i].GetField
("proxyBase", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo pluginRun = types[i].GetMethod("PluginRun");
pluginStop = types[i].GetMethod("PluginStop");
if (pluginRun != null)
{
pluginObj = assembly.CreateInstance(types[i].FullName);
coreBase.SetValue(pluginObj, proxyBase);
pluginHandler.IsLoaded = true;
pluginHandler.CorePlugin = pluginObj;
if (!proxyBase.LaunchedPlugins.Contains(pluginHandler))
{
proxyBase.LaunchedPlugins.Add(pluginHandler);
}
pluginRun.Invoke(pluginObj, null);
return true;
}
}
return false;
}
}
Итак, как вы видите, я загружаю сборку в Proxy для нового домена приложения и загруженную сборку «Плагин».Теперь, всякий раз, когда вызывается PluginRun, я получаю исключение FileNotFound, потому что оно ищет сборку плагина в базовом пути, но в папке плагинов.
Так что даже если указать PrivateBinPath для папки PLugins, похоже, чтобыть в состоянии найти его.
Я использовал Binding Log Viewer, а личный путь - NULL, просто примечание.
Любое решение этой проблемы?Спасибо