Encontrei essa pergunta e algumas respostas muito úteis, porém tive problemas de caminho, portanto, essa resposta abrangeria o carregamento da biblioteca encontrando o caminho do diretório bin.
Primeira solução:
string assemblyName = "library.dll";
string assemblyPath = HttpContext.Current.Server.MapPath("~/bin/" + assemblyName);
Assembly assembly = Assembly.LoadFrom(assemblyPath);
Type T = assembly.GetType("Company.Project.Classname");
Company.Project.Classname instance = (Company.Project.Classname) Activator.CreateInstance(T);
Segunda solução
string assemblyName = "library.dll";
string assemblyPath = HttpContext.Current.Server.MapPath("~/bin/" + assemblyName);
Assembly assembly = Assembly.LoadFile(assemblyPath);
(Company.Project.Classname) instance = (Company.Project.Classname) assembly.CreateInstance("Company.Project.Classname");
Você pode usar o mesmo princípio para interfaces (você criaria uma classe, mas converterá em interface), como:
(Company.Project.Interfacename) instance = (Company.Project.Interfacename) assembly.CreateInstance("Company.Project.Classname");
Este exemplo é para aplicativo Web, mas similar pode ser usado para aplicativo Desktop, apenas o caminho é resolvido de maneira diferente, por exemplo
Path.GetDirectoryName(Application.ExecutablePath)