Создание домена приложения и подгрузка dll

331
21 февраля 2017, 15:57

При создании домена приложения и подгрузке dll возникает исключение FileNotFoundExcption с текстом Не удалось загрузить файл или сборку "MyLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Не удается найти указанный файл. Код приложения:

    static void Main(string[] args)
    {
        AppDomainSetup setup = new AppDomainSetup();
        setup.ApplicationBase = Path.Combine(Directory.GetCurrentDirectory(), "MyApplication");
        AppDomain domain = AppDomain.CreateDomain(Guid.NewGuid().ToString(), null, setup);
        string dllPath = Path.Combine(Directory.GetCurrentDirectory(), "MyApplication", "MyLibrary.dll");
        AssemblyName name = AssemblyName.GetAssemblyName(dllPath);
        Assembly asm = domain.Load(name); //Возникает исключение
        Type[] asmTypes = asm.GetTypes();
        AppDomain.Unload(domain);
    }

Код MyLibrary.dll:

namespace MyLibrary
{
    public class MyMath
    {
        public int Sum(int a, int b)
        {
            return a + b;
        }
    }
}

Не знаю в чём проблема, файл dll есть в каталоге приложения, но почему выкидывает исключение?

Answer 1

Думаю, проблема в GetCurrentDirectory(). Текущий каталог — совсем не обязательно тот, где лежит ваша программа.

Попробуйте вместо этого

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
READ ALSO
Как обратиться к ячейкам элемента Grid и их содержимому

Как обратиться к ячейкам элемента Grid и их содержимому

Имею сетку, построенную с помощью Grid 10*10В ячейках этой сетки лежат элементы Button, созданные и помещенные туда динамически

597
Использование FluentValidation в патерне “Repository”?

Использование FluentValidation в патерне “Repository”?

Как использовать FluentValidation в патерне репозиторий, когда необходимо проверить уникальность, например, логина (проверяется в БД)?

351
Сравнение циклов

Сравнение циклов

Добрый день!

396