Q:

Как подключить DLL Динамически?

Вопрос очень тяжелый попробую описать:
Цель: Скачивание нужной мне dll'ки, и подключение (динамически или ещё как-нибудь)! 
Сам вопрос:
У меня есть dll (Ionic.dll) - для создания архива файлов!
Я хочу залить эту dll например на хостинг, и от туда при скачивание чтобы моя программа могла соединиться с этой dll и продолжить работу: Как такое сделать?
Вот кусок кода отвечающий за архивацию:
using Ionic.Zip;

public class Archive
{
    static string US = Environment.UserName;
    public static void GO()
    {
        try
        {
                using (var zip = new ZipFile())
                {
                    {
                        zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                        zip.AlternateEncodingUsage = ZipOption.Always;
                        zip.AlternateEncoding = Encoding.UTF8;
                        zip.UseZip64WhenSaving = Zip64Option.AsNecessary;
                        zip.AddDirectory("С:\\Papka");
                        zip.Save("С:\\Papka"+ "_" + ".zip");
                    }
                    zip.Dispose();
                }
            }
            else { }
        }
        catch { } 
}

Подскажите лучший способ подключения dll динамически! 
Скорее всего dll будут рядом с проектом лежать рядом в 1 папке!
Было бы так же не плохо, сделать проверку,то есть если рядом с exe'шником нету нужной dll 
сделать исключение, если же есть то подключить и начать работать.

A:

Можете добавить новый обработчик для AppDomain.CurrentDomain.AssemblyResolve и подсовывать загружаемые Assembly там. Вот тут отличный набор советов, как сделать это лучше всего.
static void Main(string[] args){
    AppDomain.CurrentDomain.AssemblyResolve += ResolveAssembly;
}

static Assembly ResolveAssembly(object sender, ResolveEventArgs args){
    return Assembly.LoadFile(@"path to the library");
}

Для случая, когда библиотеки под рукой ещё нет, оберните вызов метода, ссылающегося на любой тип из этой библиотеки, в try-catch. Даже если внутри метода лишь if (false){ ZipFile totallyNotUsedVariable; }, вызов такого метода бросит исключение.

