Я хотел бы, чтобы сборка 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 ++.
Спасибо.