Versioning a factory pattern or plugin architecture

I have a problem: I need an architecture to allow for versioning a plugin, component or factory pattern in C#. The requirements are:

  • Simple way for a running program to access a new component.
  • When a new version is added, the older version still need to be available.
  • A way to specify which version of a component to use.
  • Standard interface for the program and the components to communicate.

I've got a couple of ideas. I could modify a plugin architecture to allow for versioning. I'm not really sure about dynamically loading dlls - bit more complex than what I have time for. Although I'm willing to listen to any reasoned arguments.

A console application wrapper could work. I could pass arguments for the various requirements. Then the console app could write out a text file in a well-known format. I'm not a real fan of writing and reading text files for communication if I can help it. I'd rather just call a method in code.

At the moment the console app is the most straight-forward idea. I'd have a whole bunch of directories named using the version. Then just create a new directory, copy over the required files, run the console app, read in the output file.

I'm really looking for a simple way to get this done without too much fooling around with complex c# concepts. Or a ready-made library.