Загрузка PCL во время выполнения в памяти

Фон:
Я пытаюсь создать приложение, в котором пользователи могут создавать Portable Class Library (PCL) и загружать его в мое программное обеспечение. Так как мое программное обеспечение представляет собой клиент-серверную архитектуру, я ищу клиент на Windows, IOS, Android и Windows Phone (Xamarin будет использоваться для мобильных устройств). Я пытаюсь создать PCL для всех этих клиентов.
Проблема: PCL не имеет столько перегруженных статических методов для динамической загрузки сборки и сохранения ее в памяти. В настоящее время у меня есть сборка в виде потока, когда я загружаю ее по сети и хочу десериализовать ее в сборку. Assembly.Load принимает только строку AssemblyName (которая должна находиться на диске).

Есть ли обходной путь, другая библиотека или другой вариант загрузки сборки из потока в память?

public static List<DeviceInformation> DeCompileDevicePackage(Stream ZipStream)
    {
        List<Assembly> packageassemblies = new List<Assembly>();
        ZipArchive archive = new ZipArchive(ZipStream);
        foreach (ZipArchiveEntry entry in archive.Entries)
        {
            using (Stream zipfile = entry.Open())
            {
                switch (entry.FullName.Substring(entry.Name.Length - 4))
                {
                    case ".dll":
                        //TestPortable.dll is located in the same folder as the exectuable and this PCL library
                        AssemblyName assemblyname = new AssemblyName("TestPortable, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
                        //I want to do something similar below but I want to use zipfile Stream instead of AssemblyName
                        Assembly assembly = Assembly.Load(assemblyname);
                        packageassemblies.Add(assembly);
                        break;
                    default:
                        //ignore files
                        break;
                }
            }
        }

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

0 ответов

Другие вопросы по тегам