我们的初始设置文件中没有自定义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) {}
答案 0 :(得分:16)
对我来说,这个问题并没有嵌入Aspose dll的许可证:http://www.aspose.com/community/forums/thread/423874/initializing-the-license-file.aspx
当未检测到许可证时,他们的代码会注入动态程序集,导致其DLL失败,以及一堆与动态程序集不兼容的其他代码。
不确定这是否是确保在第三方dll上注册使用的常用许可/激活方法,因此如果是,我会在此处发布。
答案 1 :(得分:13)
发生此错误是因为无法在动态程序集上调用Assembly.Load
。在使用动态装配之前,必须先过滤掉它们。
var assemblies AppDomain.CurrentDomain.GetAssemblies().Where(p => !p.IsDynamic);
答案 2 :(得分:3)
这在app.config文件中允许来自远程源的“插件”dll。
<configuration>
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
</configuration>
答案 3 :(得分:0)
我遇到了同样的错误。我们的代码库中有一个方法可以遍历当前 AppDomain 中加载的程序集,并按名称查找给定资源。
Assembly[] allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly tempAssembly in allAssemblies)
{
Stream resourceStream = tempAssembly.GetManifestResourceStream(resourceName);
// ...
}
如果我们偶然发现了动态程序集,则对 GetManifestResourceStream 的调用将失败,并显示“动态程序集中不支持调用的成员”错误。
答案 4 :(得分:0)
我花了很多时间来解决这个问题。
我们正在加载另一个 DLL
项目的 Class Library
,该项目反过来创建了动态实例。所以下面对我有用。
解决方案:
将 DLL
的引用添加到主项目。