SOReader
SOReader

Reputation: 6017

Chain-referenced assemblies in WPF

today I'd like to know how do you configure your projects in C# WPF which references additional assemblies in a chain. By the "in a chain" I mean something like this:

The following image illustrates what I've just said:
Chain-referenced assemblies

The problem is that Resources is not copied to the bin folder of the application, causing Plugin (Ctrl on the image) resources it requires finding failure.

Workaround

There are workarounds for it which are simply to include Resources to references of the main application or use a post-build step and manually copy required files in that step.

Conclusion

Concluding, I'd like to ask how do you deal with that problem. Are the any other solutions besides those I mentioned in workaround section? Am I missing something in the projects' configuration?

Upvotes: 3

Views: 228

Answers (2)

Dan Bryant
Dan Bryant

Reputation: 27495

If you load the plugin dynamically from a different folder than the EXE, you can also copy its dependencies to the same folder as the plugin and load those assemblies dynamically, as well. You then need to handle AssemblyResolve so that the already-loaded assemblies will be resolved instead of trying to find new assemblies:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
    private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        var domain = (AppDomain)sender;
        var assemblies = domain.GetAssemblies();
        return assemblies.FirstOrDefault(assembly => assembly.GetName().Name == args.Name.Split(',')[0]);
    }

The code above does a version and strong-naming insensitive match; you can implement your own policy here if you want something stricter.

Upvotes: 0

kokoska69
kokoska69

Reputation: 11

Make sure that the output directory in the Plugin project properties is same as the output directory of your application. Otherwise you have to copy files yourself as you do.

Second option would be using embedded resources.

Upvotes: 1

Related Questions