Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."

Автор Тема: Не удалось загрузить файл или сборку "System.Threading.Tasks.Extensions..."  (Прочитано 15059 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ivmaxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Здравствуйте,
делаю что то типа записи статистики использования плагинов.
Есть БД 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 без ревита) такой же подход работает без ошибок.

В чем может быть дело?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
При загрузке плагина в Ревит (если это Application) или при старте команды (если Command) попробуйте загрузить все зависимые библиотеки через Assembly.LoadFrom().
Часто замечал, что при работе в Ревите не работает или коряво работает автоматический поиск зависимых библиотек в папке. Особенно, если это связано с xaml

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
На самом деле вариантов тьма может быть. Например, заблокированная в свойствах виндового файла dll-ка (сколько человеко-лет на этом было потеряно - не счесть). Дальше, попробуй запуститься на чистом Revit, может быть, dll-ку другой версии загружает сторонний плагин. Это касается и зависимых dll. Потом вопрос, как запускаешь плагин свой? У меня, я так и не разобрался, правда, почему, плагины с использованием NHibernate не хотят загружаться Addin-Manager-ом со сходными симптомами, тогда как из addin-манифеста всё работает. Изучи подробности ошибки, там есть Fusion log, с подробностями откуда и что пытается загрузить. Ну и вместо того, чтобы использовать Assembly.LoadFrom, как предложил Александр, лучше посмотри в сторону обработки события AppDomain.AssemblyResolve, поскольку LoadFrom может также начать загружать зависимости, ты попадаешь на то, что тебе нужно будет отслеживать порядок загрузки библиотек, всё хорошо пока не начнёшь что-то массово менять. Да и красивее так)

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
В дополнение. Изучи зависимости этой библиотеки, какие используются, каких версий. В отладчике посмотри, что покажет AppDomain.CurrentDomain.GetAssemblies(), это если дело все-таки в том, что ранее была загружена библиотека другой версии

Оффлайн ivmaxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3

во 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

у меня в свойствах тоже самое .

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Да, вполне себе возможная причина

Оффлайн ivmaxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
а как ее можно решить? :)

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Кровью и болью) Шучу. Попробуй подсунуть ему нужную версию библиотеки, опять же глянь её зависимости на всякий случай. Попробуй csproj отредактировать, убери Version и PublicKeyToken в теге Reference

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
На самый-самый край, вынеси взаимодействие с базой в отдельный процесс, ищи в гугле по interprocess communication (IPC)

Оффлайн ivmaxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
а на что нужно обратить внимание в зависимостях?



или это вообще не туда я смотрю?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Да в общем, туда. Проверь, что сборки в твою dll-ку подгружаются для .Net Framework, а то, может, ларчик совсем просто открывается). Дальше смотри, у неё зависимость System.Runtime.CompilerServices.Unsafe, проверь версию

Оффлайн ivmaxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Версия System.Runtime.CompilerServices.Unsafe - 4.7.1

а как проверить что в мою dll подгружаются для Framework?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Посмотри путь к сборке. Пакеты nuget как правило по target-ам разложены, т.е. в packages будет по разным папкам

Оффлайн ivmaxАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
...\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll

судя по всему это оно?

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Зареференсить версию для большого .Net Framework взамен (для всего пакета, не только для этой сборки) вариант? Вроде бы, чтобы netstandard использовать в .Net Framework, нужны какие-то шаманства, тут лучше погуглить