Загрузить сборку CLR (с неуправляемым кодом) в качестве встроенного ресурса в C # exe - PullRequest
0 голосов
/ 02 мая 2018

Я хотел бы, чтобы сборка CLR сохранялась как встроенный ресурс в моем приложении C # и загружалась во время выполнения. Я включил dll в качестве встроенного ресурса и попытался извлечь байты данных во время выполнения и загрузить сборку следующим образом

        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyNamespace.MyCLRAssembly.dll"))
        {
            byte[] assemblyData = new byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            return Assembly.Load(assemblyData);
        }

Однако, это не удалось, сообщив

Attempt to load an unverifiable executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019)

Чтобы предотвратить эту ошибку, DLL-библиотека CLR должна быть скомпилирована с ключом / CLR: Pure, однако это невозможно, поскольку DLL-библиотека CLR содержит неуправляемый код.

Поэтому я попробовал альтернативное решение, чтобы извлечь сборку и скопировать во временную папку в пользовательском пути AppData, а затем соответственно установить переменную PATH. Это не удалось, файл отчета не обнаружил исключение, когда приложение попыталось получить доступ к сборке CLR. Я могу скопировать в путь установки приложения C #, и он работает нормально, но не в удаленной папке.

В качестве теста я скопировал dll CLR в папку в переменной PATH, но это не удалось. Может кто-нибудь сказать мне, что я делаю не так? Связана ли проблема с различием в типах сборок, т. Е. Сборкой C #, загружающей сборку с помощью управляемого и неуправляемого C ++.

Спасибо.

...