Загрузка подключаемых файлов DLL: "Вызванный элемент не поддерживается в динамической сборке".
У нас есть пользовательские библиотеки DLL, которые не включены в наш начальный установочный файл. Они загружаются во время выполнения. Этот процесс работал нормально при использовании.NET 2.0, но мы получаем сообщение об ошибке "Вызванный элемент не поддерживается в динамической сборке" теперь, когда мы используем.NET 4.0.
try
{
assem = Assembly.LoadFrom(fi.FullName); //fi is FileSystemInfo
}
catch (FileLoadException) {}
catch (BadImageFormatException) {}
catch (System.Security.SecurityException) {}
catch (ArgumentException) {}
catch (PathTooLongException) {}
5 ответов
Эта ошибка происходит потому, что Assembly.Load
нельзя вызывать на динамических сборках. Вы должны отфильтровать динамические сборки перед их использованием.
var assemblies AppDomain.CurrentDomain.GetAssemblies().Where(p => !p.IsDynamic);
Для меня эта проблема не встраивала лицензию на dll Aspose: http://www.aspose.com/community/forums/thread/423874/initializing-the-license-file.aspx
Их код внедряет динамические сборки, когда лицензия не обнаружена, что приводит к сбою их библиотек DLL, а также кучу другого кода, который не совместим с динамическими сборками.
Не уверен, является ли это распространенным методом лицензирования / активации для обеспечения зарегистрированного использования с сторонними dll, поэтому я опубликую его здесь для Google, если это так.
Это в файле app.config позволяет "подключить" библиотеки DLL из удаленных источников.
<configuration>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration>
Я столкнулся с той же ошибкой. В нашей кодовой базе есть метод, который просматривает сборки, загруженные в текущем домене приложений, и ищет данный ресурс по имени.
Assembly[] allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly tempAssembly in allAssemblies)
{
Stream resourceStream = tempAssembly.GetManifestResourceStream(resourceName);
// ...
}
Если так случилось, что мы наткнулись на динамическую сборку, вызов GetManifestResourceStream завершился ошибкой «Вызванный член не поддерживается в динамической сборке».
Я трачу много часов, чтобы разобраться в этой проблеме.
Мы загружали еще один
Class Library
проект, который, в свою очередь, создает экземпляр на лету. Так что Ниже работал у меня.
Решение:
Добавить ссылку
DLL
к основному проекту.