Не загружает dll

Здравствуйте! Выдает вот такую ошибку при попытке открыть программу

Модуль (dll) подключенной в проекту, сам dll находится в той же папке, что и проект. все равно выдает ошибку.

А где исходник?

Всё грузится!

{$reference LitDev.dll}

Мы увидели проблему - это в проектах что-то нарушилось

Это после исправления CurrentDirectory SunSerega полода назад.

Сейчас откатим

1 лайк

Проблему подтверждаю! Среда разработки подсказывает классы, методы, но на этапе исполнения вылетает ошибка:

Ошибка времени выполнения: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку “ArduinoToPascal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null” либо одну из их зависимостей. Не удается найти указанный файл. Стек: в BABCClient.Program.$Main() в BABCClient.Program.Main()

Где можно будет найти рабочую версию компилятора после отката?

Скачайте сейчас и отпишитесь, работает ли.

Я надеюсь, вы нормально разберётесь а не тупо откатите? Теперь то uses-in у меня вообще везде.

Ну и, кстати, скажите как именно мой фикс что то ломал. Интересно.

Подскажите, где можно скачать?

  • С Офф. сайта (версия оттуда выдает такую же ошибку)
  • с репозитория (последний комит 2 дня назад)

Или есть другой источник?

да

Самая последняя собранная версия всегда тут:
http://pascalabc.net/ssyilki-dlya-skachivaniya

В репозитории есть релизы, но это скорее что то старое но сколько то стабильное.

Ну а коммист с откатом, по моему, ещё не попал в репозиторий. Поэтому и собирать свой билд сейчас бесполезно.

Проверил Standard/Mini Pack, ошибка без изменений. Надеюсь, скоро появится рабочая версия, использование dll - главная идея проекта.

Как вам уже сказал валерий в соседней вашей теме - используйте $reference, он должен работать вне этой ошибки. Но ваше дальнейшее участие в поиске ошибки всё же необходимо.

@Admin я так же ещё раз прошёлся по коду - и не вижу чтоб мой код мог вызывать такую ошибку. Напомню, в Compiler.cs, строчка 1813:

Environment.CurrentDirectory = CompilerOptions.SourceFileDirectory; // нужно для подключения *.inc и *.resources

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

Кроме того, чтоб Environment.CurrentDirectory поменялось на что то кроме папки с исходниками - необходимо использовать uses-in. Без uses-in мой код точно не мог ничего сломать. @AvilovAlex вы использовали uses-in?

Нет, uses-in не использовал, а вот $reference был с самого начала. Файл прикрепить не могу, листинг ниже: {$reference ArduinoToPascal.dll} begin var x := new ArduinoToPascal.Class1(); print(x.Mysum(5,3)); end.

Код надо вставлять так:

```
код
```

Знак ` - это ё в англ раскладке. На строчках с ``` ничего больше быть не должно, иначе оно не работает.

Огромное спасибо всем! Ошибка в новом релизе уже исчезла, но , к сожалению, нашел еще одну ошибку. Попытаюсь далее описать ошибку)

При использовании Библиотеки SourceGrid компилятор как бы неправильно инициализирует переменную под таблицу из данного грида (это мое мнение, могу ошибаться), из-за такого поведения массив с гридом не создается . Вот код (такой же код с использованием SourceGrid на c# работает без ошибок) и библиотека: testSourcegrid.rar (215,0 КБ)

А ошибка раньше выдавалась при первой компиляции сразу после перезапуска IDE? Если это что то связанное с Environment.CurrentDirectory - ошибка должна была выдаваться или после хотя бы 1 компиляции (считая не_успешные).

Он сломал любое использование dll в проектах. Категорически нельзя было исправлять вашу ошибку, правя в 15 местах по коду изменение CurrentDirectory. Нужно вводить какой-то словарик директорий для uses, а не изменять по всему проекту глобальные переменные.

Я не приму pullrequest, изменяющий CurrentDirectory

Нет, это не объяснение а просто ещё одна фраза “чтоб отстали”.

Ещё раз, если в программе нет uses-in - мой код не должен менять значение Environment.CurrentDirectory. Никогда.

Самый правильный фикс - принимать в CompileUnit (или как его там) ещё 1 параметр, текущий путь. А при дальнейшем подключении модулей, $include и т.п. - использовать этот путь.

Вот только, как я ранее говорил, в коде, выбирающем путь для uses-in модуля - тот ещё бардак. Если делать нормальный фикс - надо для начала подчистить всё. На это надо время.

А перед этим надо таки разобраться при чём тут проекты и .dll, чтоб можно было сделать что то временно. Чтоб не ломать ни проекты, ни uses-in.