Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: ivmax от 22-04-2020, 12:01:54

Название: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 22-04-2020, 12:01:54
Здравствуйте,
делаю что то типа записи статистики использования плагинов.
Есть БД PostgreSQL, создал базу и подключаюсь к ней, используя Npgsql.EntityFrameworkCore.PostgreSQL, чтобы сделать новую запись. Получаю ошибку на строке 35:
"Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" либо одну из их зависимостей. Не удается найти указанный файл.", в ссылках и в папке с самим плагином эта библиотека есть.
Код:
Код - C# [Выбрать]
  1. [TransactionAttribute(TransactionMode.Manual)]
  2.     [RegenerationAttribute(RegenerationOption.Manual)]
  3.     public class ParametersDialogCommand : IExternalCommand
  4.     {
  5.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  6.         {
  7.             Statistic.SendStatistic("P", "PC" );
  8.  
  9.           \...
  10.              ..../
  11.             return Result.Succeeded;
  12.         }
  13.  
  14.  
  15.      
  16.     }
  17.     public static class Statistic
  18.     {
  19.         public static void SendStatistic(string plaginName, string buttonName)
  20.         {
  21.             StatisticElement element = new StatisticElement()
  22.             {
  23.                  \...
  24.                    ..../
  25.  
  26.             };
  27.             try
  28.             {
  29.                 SendStatistic(element);
  30.             }
  31.             catch (Exception e){ new ExceptionWindow(e); }
  32.         }
  33.         private static void SendStatistic(StatisticElement element)
  34.         {
  35.             using (StatisticContext db = new StatisticContext())
  36.             {
  37.                 db.StatisticElements.Add(element);
  38.                 db.SaveChanges();
  39.             }
  40.         }
  41.     }
  42.  
  43.     public class StatisticContext : DbContext
  44.     {
  45.         public DbSet<StatisticElement> StatisticElements { get; set; }
  46.         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  47.         {
  48.             optionsBuilder.UseNpgsql("Host=192.168.5.71; Port=5432; Database=StatisticElements; Username=user; Password=pas");
  49.         }
  50.     }
  51.  

При этом в другой программе (wpf без ревита) такой же подход работает без ошибок.

В чем может быть дело?
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Пекшев aka Modis от 22-04-2020, 12:04:47
При загрузке плагина в Ревит (если это Application) или при старте команды (если Command) попробуйте загрузить все зависимые библиотеки через Assembly.LoadFrom().
Часто замечал, что при работе в Ревите не работает или коряво работает автоматический поиск зависимых библиотек в папке. Особенно, если это связано с xaml
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 12:18:09
На самом деле вариантов тьма может быть. Например, заблокированная в свойствах виндового файла dll-ка (сколько человеко-лет на этом было потеряно - не счесть). Дальше, попробуй запуститься на чистом Revit, может быть, dll-ку другой версии загружает сторонний плагин. Это касается и зависимых dll. Потом вопрос, как запускаешь плагин свой? У меня, я так и не разобрался, правда, почему, плагины с использованием NHibernate не хотят загружаться Addin-Manager-ом со сходными симптомами, тогда как из addin-манифеста всё работает. Изучи подробности ошибки, там есть Fusion log, с подробностями откуда и что пытается загрузить. Ну и вместо того, чтобы использовать Assembly.LoadFrom, как предложил Александр, лучше посмотри в сторону обработки события AppDomain.AssemblyResolve, поскольку LoadFrom может также начать загружать зависимости, ты попадаешь на то, что тебе нужно будет отслеживать порядок загрузки библиотек, всё хорошо пока не начнёшь что-то массово менять. Да и красивее так)
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 12:24:28
В дополнение. Изучи зависимости этой библиотеки, какие используются, каких версий. В отладчике посмотри, что покажет AppDomain.CurrentDomain.GetAssemblies(), это если дело все-таки в том, что ранее была загружена библиотека другой версии
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 22-04-2020, 13:08:10

во FusionLog:
\...
Журнал: попытка скачивания нового URL file:///C:/Users/ivanov/AppData/Roaming/Autodesk/Revit/Addins/2019/O/ParametersDialog/System.Threading.Tasks.Extensions.DLL.
Предупреждение: при проверке имени сборки обнаружено несовпадение: Revision Number
.../

из за этого может быть?



еще  на просторах нашел https://ru.stackoverflow.com/questions/1055167/%D0%BD%D0%B5%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BA%D1%82%D0%BD%D0%B0%D1%8F-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F-%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8-%D0%BF%D1%80%D0%B8-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5-%D1%81-nuget

у меня в свойствах тоже самое .
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 13:23:28
Да, вполне себе возможная причина
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 22-04-2020, 13:23:57
а как ее можно решить? :)
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 13:28:23
Кровью и болью) Шучу. Попробуй подсунуть ему нужную версию библиотеки, опять же глянь её зависимости на всякий случай. Попробуй csproj отредактировать, убери Version и PublicKeyToken в теге Reference
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 13:30:31
На самый-самый край, вынеси взаимодействие с базой в отдельный процесс, ищи в гугле по interprocess communication (IPC)
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 22-04-2020, 13:50:53
а на что нужно обратить внимание в зависимостях?

(https://i.postimg.cc/ftgjh2mZ/image.png) (https://postimg.cc/ftgjh2mZ)

или это вообще не туда я смотрю?
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 14:00:41
Да в общем, туда. Проверь, что сборки в твою dll-ку подгружаются для .Net Framework, а то, может, ларчик совсем просто открывается). Дальше смотри, у неё зависимость System.Runtime.CompilerServices.Unsafe, проверь версию
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 22-04-2020, 16:04:07
Версия System.Runtime.CompilerServices.Unsafe - 4.7.1

а как проверить что в мою dll подгружаются для Framework?
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 16:18:47
Посмотри путь к сборке. Пакеты nuget как правило по target-ам разложены, т.е. в packages будет по разным папкам
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 22-04-2020, 16:21:25
...\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll

судя по всему это оно?
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Александр Игнатович от 22-04-2020, 16:44:52
Зареференсить версию для большого .Net Framework взамен (для всего пакета, не только для этой сборки) вариант? Вроде бы, чтобы netstandard использовать в .Net Framework, нужны какие-то шаманства, тут лучше погуглить
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: Osse от 09-11-2021, 18:10:02
Добрый день! Удалось решить проблему? Также столкнулся с ней при попытке работы с БД через Entity Framework.
Название: Re: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."
Отправлено: ivmax от 09-11-2021, 21:32:54
Не удалось. Сделал небольшой сервис разместил в ИИС, а сервис уже пишет в БД.