28

我们有自定义 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) {}
4

5 回答 5

30

发生此错误是因为Assembly.Load无法调用动态程序集。您必须先过滤掉动态程序集,然后才能使用它们。

var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(p => !p.IsDynamic);

于 2017-04-28T08:42:49.280 回答
27

对我来说,这个问题没有嵌入 Aspose dll 的许可证:http ://www.aspose.com/community/forums/thread/423874/initializing-the-license-file.aspx

他们的代码在未检测到许可证时注入动态程序集,导致他们的 DLL 失败,以及一堆与动态程序集不兼容的其他代码。

不确定这是否是确保注册使用 3rd 方 dll 的常见许可/激活方法,所以如果是,我将在此处发布给谷歌。

于 2014-04-14T02:50:50.733 回答
4

这在 app.config 文件中允许来自远程源的“插件”dll。

<configuration>
   <runtime>
      <loadFromRemoteSources enabled="true"/>
   </runtime>
</configuration>

http://msdn.microsoft.com/en-us/library/dd409252.aspx

于 2012-04-11T23:23:12.320 回答
0

我遇到了同样的错误。我们的代码库中有一个方法可以遍历当前 AppDomain 中加载的程序集,并按名称查找给定的资源。

        Assembly[] allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
        
        foreach (Assembly tempAssembly in allAssemblies)
        {
            Stream resourceStream = tempAssembly.GetManifestResourceStream(resourceName);
            // ...
            
        }
        

如果碰巧我们偶然发现了动态程序集,则对 GetManifestResourceStream 的调用将失败,并出现“动态程序集不支持调用的成员”错误。

于 2021-03-23T18:21:26.667 回答
0

我花了很多时间来解决这个问题。

我们正在加载DLL另一个Class Library项目,该项目又在飞行中创建实例。所以下面为我工作。

解决方案:

DLL添加对主项目的引用。

于 2021-06-16T12:14:32.450 回答