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