Trevorm
Trevorm

Reputation: 615

Loading plug-in DLL files, "The invoked member is not supported in a dynamic assembly."

We have custom DLL's that are not included in our initial setup file. They are loaded at runtime. This process worked fine while using .NET 2.0, but we are getting the "The invoked member is not supported in a dynamic assembly" error message now that we are using .NET 4.0.

try
{
    assem = Assembly.LoadFrom(fi.FullName); //fi is FileSystemInfo
}
catch (FileLoadException) {}
catch (BadImageFormatException) {}
catch (System.Security.SecurityException) {}
catch (ArgumentException) {}
catch (PathTooLongException) {}

Upvotes: 29

Views: 34797

Answers (6)

Michael Santana
Michael Santana

Reputation: 1

In my case was having the wrong architecture on visual studio. I had "Any CPU" and changing it to x86 solved the problem for me.

Upvotes: 0

Shaiju T
Shaiju T

Reputation: 6609

I spend many hours to figure out this issue.

We were loading DLL of another Class Library project which in turn creates the Instance on Fly. So Below worked for me.

Solution:

Add Reference of the DLL to main project.

Upvotes: 0

Sebacote
Sebacote

Reputation: 699

I ran into the same error. There is a method in our codebase that walks the assemblies loaded in the current AppDomain, and looks for a given resource by name.

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

If it so happens that we stumble upon a dynamic assembly, the call to GetManifestResourceStream fails with the "The invoked member is not supported in a dynamic assembly" error.

Upvotes: 0

Gusdor
Gusdor

Reputation: 14334

This error is occurring because Assembly.Load cannot be called upon dynamic assemblies. You must filter out the dynamic assemblies before using them.

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

Upvotes: 35

user326608
user326608

Reputation: 2548

For me this issue was not embedding the license for a Aspose dll: http://www.aspose.com/community/forums/thread/423874/initializing-the-license-file.aspx

Their code injects dynamic assemblies when a license isn't detected, causing their DLLs to fail, as well as a bunch of other code that isn't compatible with dynamic assemblies.

Not sure if this is a common licensing/activation method for ensuring registered use with 3rd party dlls, so I'll post it here for google if it is.

Upvotes: 30

Trevorm
Trevorm

Reputation: 615

This in the app.config file allows for "plug-in" dll's from remote sources.

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

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

Upvotes: 4

Related Questions