Не могли бы вы посмотреть на это, пожалуйста.

ебольшой класс, который я использую для поиска списка доступных плагинов:

internal static class PluginDirectoryLoader
{
    public static PluginInfo[] ListPlugins(string path)
    {
        var name = Path.GetFileName(path);
        var setup = new AppDomainSetup
        {
            ApplicationBase = path,
            ShadowCopyFiles = "true"
        };
        var appdomain = AppDomain.CreateDomain("PluginDirectoryLoader." + name, null, setup);
        var exts = (IServerExtensionDiscovery)appdomain.CreateInstanceAndUnwrap("ServerX.Common", "ServerX.Common.ServerExtensionDiscovery");
        PluginInfo[] plugins = null;
        try
        {
            plugins = exts.ListPlugins(); // <-- BREAK HERE
        }
        catch
        {
            // to do
        }
        finally
        {
            AppDomain.Unload(appdomain);
        }
        return plugins ?? new PluginInfo[0];
    }
}

path Параметр указывает на подкаталог, содержащий сборки плагинов для загрузки. Идея состоит в том, чтобы загрузить их, используя отдельный домен приложений с включенным теневым копированием.

Вэто В этом случае теневое копирование на самом деле не нужно, поскольку AppDomain быстро выгружается, но когда я фактически загружаю плагины в следующем блоке кода, который я собираюсь написать, я хочу использовать теневое копирование, чтобы двоичные файлы могли обновляться на лету , Я включил теневое копирование в этом классе в качестве теста, чтобы убедиться, что я все делаю правильно.

По-видимому, я не делаю это правильно, потому что, когда я ломаю в отладчике закомментированную строку в примере кода (т.е.plugins = exts.ListPlugins()), оригинальные сборки плагинов заблокированы приложением!

Ввиду того, что я указываю, что сборки, загруженные AppDomain, должны быть теневым копированием, почему они блокируются приложением?

Ответы на вопрос(1)

Ваш ответ на вопрос