Решить ссылки на сборки из другой папки

Я разрабатываю приложение, которое ссылается и использует некоторые сторонние сборки от определенного поставщика; в окне разработки у меня есть эти 3 сборки в справочной папке в моем исходном дереве, и я могу ссылаться на них и создавать приложение, Я не хочу копировать все сборки поставщиков в папку моего приложения, и я не могу поместить туда только 3, на которые я ссылаюсь, потому что они также загружают другие сборки, и если у меня нет их всех (многих ...), это не сработает.

Я не делаю ничего особенного, не создаю домены приложений и не загружаю сборки через отражение, просто хочу, чтобы среда CLR разрешала ссылки по мере необходимости при запуске или выполнении приложения.

Спасибо.

Изменить: здесь окончательный рабочий код

static System.Reflection.Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    Logger logger = new Logger();

    try
    {
        string RMSAssemblyFolder = ConfigurationManager.AppSettings["RMSAssemblyFolder"];

        Assembly MyAssembly = null;
        string strTempAssmbPath = string.Empty;

        Assembly objExecutingAssemblies = Assembly.GetExecutingAssembly();
        AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies();

        AssemblyName myAssemblyName = Array.Find<AssemblyName>(arrReferencedAssmbNames, a => a.Name == args.Name);

        if (myAssemblyName != null)
        {
            MyAssembly = Assembly.LoadFrom(myAssemblyName.CodeBase);
        }
        else
        {
            strTempAssmbPath = Path.Combine(RMSAssemblyFolder, args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll");

            if (!string.IsNullOrEmpty(strTempAssmbPath))
            {
                if (File.Exists(strTempAssmbPath))
                {
                    logger.Information("Assembly to load: {0} - File was found in: {1}", args.Name, strTempAssmbPath);

                    // Loads the assembly from the specified path.                  
                    MyAssembly = Assembly.LoadFrom(strTempAssmbPath);
                }
            }
        }

        // Returns the loaded assembly.
        return MyAssembly;
    }
    catch (Exception exc)
    {
        logger.Error(exc);
        return null;
    }
}
7
задан Davide Piras 10 March 2011 в 16:47
поделиться