Не работает автозагрузка в Civil 3D 2015

Автор Тема: Не работает автозагрузка в Civil 3D 2015  (Прочитано 7030 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Добрый день!

Мой плагин должен работать во всех версиях Civil 3D, начиная с версии 2013. Для автозагрузки плагина в среду Civil я использую механизм AutoLoader. Всё отлично работает, кроме версии 2015: загружаются панельки с иконками (иконки находятся в отдельных DLL), но попытка выполнить команду из плагина выводит НЕИЗВЕСТНАЯ КОМАНДА. Если загрузить плагин через NETLOAD, то команды работают. Файл PackageContents.xml прикладываю.

Проблема не на одном компьютере.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #1 : 03-12-2019, 14:35:00 »
1. ProductCode="[e2680772-185d-4ab4-87c2-65bbae2952db]"Почему квадратные скобки? Вроде как позволяется либо без скобок, либо с фигурными.

2. Не понимаю логики. DLL везде грузится одна и та же. Зачем же при этом для каждой версии отдельный CUIX??? Я бы понял, если бы было деление CUIX до 2015 исключительно и 2015+ (т.к. в 2015 появилась тёмная тема по умолчанию). Но насколько я вижу, это не учитывалось. Тогда в чём смысл?

3. А может вообще уже отказаться от версии 2016 и ниже? Windows 10 их не поддерживает, Autodesk их не поддерживает. Может пора обновляться?

А по изначальному вопросу - в PackageContents.xml ничего критичного не увидел. Проблема может быть конкретно с Civil 3D 2015 на отдельной машине. Пробовали на других?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #2 : 03-12-2019, 14:39:29 »
vermesser,
Нужно вставить отладку в IExtensionApplication.Initialize и проверить вызывается он или нет.
Не забываем, что в момент выполнения этого метода еще нет открытых документов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #3 : 03-12-2019, 14:52:07 »
Дмитрий Загорулькин, квадратные скобки вот отсюда.

Файлы адаптации, например из 2015 не будут работать в 2020 и вроде в 2019. Ещё я использую встроенные иконки из Civil - они в разных версиях по разному называются, то есть ссылаться на них нужно по разному. Не обращайте внимание - каждый файл сделан в той версии, в которой он должен открываться.

Да, пора отказываться, но не все пока могут.

На других пробовал, но проверю на большем количестве машин.

Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #4 : 03-12-2019, 14:54:27 »
Дмитрий Загорулькин, квадратные скобки вот отсюда.
Там совсем другой смысл в эти скобки вкладывается.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #5 : 03-12-2019, 15:00:49 »
Александр Ривилис, да, похоже и Вы и Дмитрий Загорулькин, правы - скобки убрал. Посмотрю что с отладкой.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #6 : 03-12-2019, 15:01:36 »
Дмитрий Загорулькин, квадратные скобки вот отсюда.
Там, наверное, подразумевалось, что вставка будет вместо текста вместе с этими скобками.
Файлы адаптации, например из 2015 не будут работать в 2020 и вроде в 2019.
Не подтверждаю. Я свои меню делаю до сих пор в 2014 версии и они спокойно открываются во всех последующих.
Ещё я использую встроенные иконки из Civil - они в разных версиях по разному называются, то есть ссылаться на них нужно по разному.
А это уже вполне себе аргумент. Принимается :)

Просто работы получается много, если, например, надо добавить новую кнопку. И скоро (с выходом 2021) ещё больше будет...
На других пробовал, но проверю на большем количестве машин.
Тут важно не количество, а тот факт, чтобы Civil 3D ставился не с одного и того же дистрибутива. В том смысле, что можно проверить и на 100 ПК, но если они все в одной организации и Civil 3D на всех них ставился раскатыванием образа системы, то, скорее всего, везде будет одна и та же проблема.

Кстати, такая проблема "неподгружающихся DLL" периодически появляется на всех версиях Civil 3D. Примерно неделю назад пришлось тоже одному пользователю подгружать через NETLOAD, потому что Autoloader по какой-то причине не загрузил DLL. С чем это связано - я не смог понять :(

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #7 : 03-12-2019, 15:04:14 »
vermesser,
Если это не секрет, то выложите код Initialize и уточните какие еще сборки подключены - возможно какие-то из них в момент загрузки вашей сборки еще не загружены в Civil 3D, что не даёт загрузиться вашему приложению.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #8 : 03-12-2019, 15:11:21 »
Александр Ривилис, не секрет:
Код - vb.net [Выбрать]
  1. Imports Autodesk.AutoCAD.ApplicationServices
  2. Imports Autodesk.AutoCAD.EditorInput
  3. Imports Autodesk.AutoCAD.Runtime
  4. Imports System.Drawing
  5. Imports System.Drawing.Text
  6. Imports System.IO
  7. Imports System.Reflection
  8.  
  9. Public Class Initialization
  10.  
  11.     Implements IExtensionApplication
  12.  
  13.     Friend Shared kdLoad As Boolean = False
  14.     Friend Shared reLoad As Boolean = False
  15.     Friend Shared cuixLoad As Boolean = False
  16.     Friend Shared bExist As Boolean = False
  17.     Friend Shared fExist As Boolean = False
  18.     Friend Shared rsLoad As Boolean = False
  19.  
  20.     Private cVersion As String
  21.  
  22.     Public Sub Initialize() Implements IExtensionApplication.Initialize
  23.  
  24.         cVersion = Core.Application.Version.Major & "." & Core.Application.Version.Minor
  25.  
  26.         Dim ed As Editor = Core.Application.DocumentManager.MdiActiveDocument.Editor
  27.         ed.WriteMessage(vbCrLf)
  28.  
  29.         ed.WriteMessage(vbCrLf & "SomeSmallTools {0}.", My.Application.Info.Version)
  30.  
  31.         ed.WriteMessage(vbCrLf & "Версия среды: {0}.", cVersion)
  32.  
  33.         'Проверяем наличие файлов расширений
  34.         Try
  35.             Assembly.LoadFrom(My.Application.Info.DirectoryPath & "\Extensions\KDTree.dll")
  36.             kdLoad = True
  37.             ed.WriteMessage(vbCrLf & "Модуль KDSharp: Загружен. ")
  38.         Catch ex As Exception
  39.             kdLoad = False
  40.             ed.WriteMessage(vbCrLf & "Модуль KDSharp: Не удалось загрузить. " & vbCrLf & ex.ToString)
  41.         End Try
  42.         Try
  43.             Assembly.LoadFrom(My.Application.Info.DirectoryPath & "\Extensions\RandomExtension.dll")
  44.             reLoad = True
  45.             ed.WriteMessage(vbCrLf & "Модуль RandomExtension: Загружен. ")
  46.         Catch ex As Exception
  47.             reLoad = False
  48.             ed.WriteMessage(vbCrLf & "Модуль RandomExtension: Не удалось загрузить. " & vbCrLf & ex.ToString)
  49.         End Try
  50.  
  51.         'Проверяем наличие файлов шаблонов
  52.         If File.Exists(My.Application.Info.DirectoryPath & "\Templates\Blocks.dwg") Then
  53.             bExist = True
  54.             ed.WriteMessage(vbCrLf & "Файл шаблонов Blocks.dwg: Найден. ")
  55.         Else
  56.             ed.WriteMessage(vbCrLf & "Файл шаблонов Blocks.dwg: Не найден. ")
  57.         End If
  58.  
  59.         'Проверяем наличие библиотек ресурсов
  60.         Select Case cVersion
  61.             Case "19.0", "19.1" 'Shared 2013+
  62.                 If File.Exists(My.Application.Info.DirectoryPath & "\Interface\Shared 2013+\SSToolsUI.dll") Then
  63.                     rsLoad = True
  64.                     ed.WriteMessage(vbCrLf & "Компоненты интерфейса: Найдены. ")
  65.                 Else
  66.                     ed.WriteMessage(vbCrLf & "Компоненты интерфейса: Не найдены. ")
  67.                 End If
  68.             Case "20.0", "20.1" 'Shared 2015+
  69.                 If File.Exists(My.Application.Info.DirectoryPath & "\Interface\Shared 2015+\SSToolsUI.dll") And
  70.                     File.Exists(My.Application.Info.DirectoryPath & "\Interface\Shared 2015+\SSToolsUI_light.dll") Then
  71.                     rsLoad = True
  72.                     ed.WriteMessage(vbCrLf & "Компоненты интерфейса: Найдены. ")
  73.                 Else
  74.                     ed.WriteMessage(vbCrLf & "Компоненты интерфейса: Не найдены. ")
  75.                 End If
  76.             Case "21.0", "22.0", "23.0", "23.1" 'Shared 2017+
  77.                 If File.Exists(My.Application.Info.DirectoryPath & "\Interface\Shared 2017+\SSToolsUI.dll") And
  78.                     File.Exists(My.Application.Info.DirectoryPath & "\Interface\Shared 2017+\SSToolsUI_light.dll") Then
  79.                     rsLoad = True
  80.                     ed.WriteMessage(vbCrLf & "Компоненты интерфейса: Найдены. ")
  81.                 Else
  82.                     ed.WriteMessage(vbCrLf & "Компоненты интерфейса: Не найдены. ")
  83.                 End If
  84.         End Select
  85.  
  86.         'Проверяем наличие шрифтов в системе
  87.         Dim fs As New InstalledFontCollection
  88.         Dim fCount As Integer = 0
  89.         For Each ff As FontFamily In fs.Families
  90.             If ff.Name = My.Settings.SSToolsNormalFont Or ff.Name = My.Settings.SSToolsFramedFont Then
  91.                 fCount += 1
  92.             End If
  93.         Next
  94.         If fCount = 2 Then
  95.             fExist = True
  96.             ed.WriteMessage(vbCrLf & "Шрифты: Установлены.")
  97.         Else
  98.             ed.WriteMessage(vbCrLf & "Шрифты: Не установлены.")
  99.             With My.Settings
  100.                 .XYZDUsePluginFont = False
  101.                 .XYZDVertDiffsFrameOn = False
  102.                 .Save()
  103.             End With
  104.         End If
  105.         ed.WriteMessage(vbCrLf)
  106.  
  107.     End Sub
  108.  
  109.     Public Sub Terminate() Implements IExtensionApplication.Terminate
  110.         Console.WriteLine("Работа SomeSmallTools завершена. ")
  111.     End Sub
  112.  
  113. End Class
  114.  

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #9 : 03-12-2019, 15:16:26 »
vermesser,
А для меня секрет, как оно работает в остальных версиях.
Уже на этой строке должно возникнуть исключение:
Код - vb.net [Выбрать]
  1. Dim ed As Editor = Core.Application.DocumentManager.MdiActiveDocument.Editor
так как MdiActiveDocument равно null.
На всякий случай напоминаю, что если в методе Initialize возникает необработанное исключение, то сборка не грузится и команды, определенные в ней остаются неизвестными.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #10 : 03-12-2019, 15:25:18 »
Александр Ривилис, да, точно. Работает без ошибок. Но лучше убрать.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #11 : 03-12-2019, 15:33:26 »
Работает без ошибок.
Ты имеешь в виду в других версиях? Ну значит в них исключение не происходит - видимо MdiActiveDocument не null. Кстати это может зависеть еще и от значения системной переменной STARTUP: https://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2018/RUS/AutoCAD-Core/files/GUID-941B7406-2342-47EA-9881-BAFF3A554310-htm.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #12 : 03-12-2019, 15:46:28 »
Александр Ривилис, я убрал эти строки, но всё равно не работает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #13 : 03-12-2019, 16:04:15 »
Александр Ривилис, я убрал эти строки, но всё равно не работает.
Нужно проверить вызывается метод Initialize вообще или нет. Если вызывается, то ищи что еще вызывает исключение. Если не вызывается, то возможно нужно смотреть на системную переменную SECURELOAD - для проверки установить ее 0 и перезапустить AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 66
  • Карма: 2
Re: Не работает автозагрузка в Civil 3D 2015
« Ответ #14 : 03-12-2019, 22:34:30 »
Точку останова поставил здесь:



После того как были загружены все символы сначала было такое исключение:



Я пропустил его. Потом такое уже без конца:



SECURELOAD=0 не помогло.