Почему появилось исключение

Автор Тема: Почему появилось исключение  (Прочитано 10571 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Загрузил документ:
Код - C# [Выбрать]
  1. Database acCurDb = new Database(false, true);
  2. strFileName = "c:\\Users\\sbe.CSOFT-SPB\\Documents\\AutoCAD\\Чертеж.dwg";
  3. acCurDb.ReadDwgFile(strFileName, FileShare.Read, true, null);
  4.  
Вызвал метод поиска текстов чертежа: FindTextsInDrawing(acCurDb);
На операторе using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction()) получил исключение
System.InvalidProgramException: 'Среда выполнения Common Language Runtime обнаружила недопустимую программу.'
Где я не прав?


« Последнее редактирование: 25-02-2021, 19:52:04 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #1 : 25-02-2021, 19:53:08 »
Борис_С,
По этому обрывку кода я ничего сказать не могу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #2 : 25-02-2021, 20:11:53 »
Немного изменил код. Загружаю чертеж при старте accoreconsole.exe.
Код - C# [Выбрать]
  1. using acadConsApp = Autodesk.AutoCAD.ApplicationServices.Core.Application;
  2.  
  3. namespace ConsoleApp
  4. {
  5.     class AcadBatchProcessing
  6.     {
  7.         static void Main(string[] args)
  8.         {
  9.             string strFileName = "c:\\Users\\sbe.CSOFT-SPB\\Documents\\AutoCAD\\Чертеж.dwg";
  10.             System.Diagnostics.Process.Start("C:\\Program Files\\Autodesk\\AutoCAD 2020\\accoreconsole.exe",
  11.                 "/i " + strFileName);
  12.             FindTextsInDrawing();
  13.         }
  14.  
  15.         // Поиск всех текстов чертежа
  16.         public static void FindTextsInDrawing()
  17.         {
  18.             try
  19.             {
  20.                 // Get the current document and database, and start a transaction
  21.                 Document acDoc = acadConsApp.DocumentManager.MdiActiveDocument;
  22.                 Database acCurDb = acDoc.Database;
  23.  
  24.                 using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  25.                 {
  26.                     // Открываю Block table для чтения
  27.                     BlockTable acBlkTbl;
  28.                     acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
  29.                                                  OpenMode.ForRead) as BlockTable;
  30.  
  31.                     // Открываю Block table record Model space для чтения
  32.                     BlockTableRecord acBlkTblRec;
  33.                     acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  34.                                                     OpenMode.ForRead) as BlockTableRecord;
  35.                     FindItems(acTrans, acBlkTblRec);
  36.                 }
  37.             }
  38.             catch (System.Exception e)
  39.             {
  40.                 var acDocEd = acadConsApp.DocumentManager.MdiActiveDocument.Editor;
  41.                 acDocEd.WriteMessage(String.Format("Ошибка. {0}{1}" + Environment.NewLine, e.Message, e.StackTrace));
  42.             }
  43.         }
  44.     }
  45. }
  46.  

На операторе Document acDoc = acadConsApp.DocumentManager.MdiActiveDocument; возникает то же исключение:
System.InvalidProgramException: 'Среда выполнения Common Language Runtime обнаружила недопустимую программу.'

Отмечено как Решение Борис_С 25-02-2021, 20:32:42

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #3 : 25-02-2021, 20:21:21 »
Борис_С,
Извини, но это бред. Нужно запустить accoreconsole.exe с scr-файлом, которые загружает .NET-сборку (твоё приложение) и запускает команду для обработки чертежей. Ты же сейчас пытаешься выполнить код работы с чертежом из своего exe-файла, что сделать не получится...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #4 : 25-02-2021, 20:26:00 »
А где про это можно прочитать или посмотреть примеры?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #5 : 25-02-2021, 20:28:39 »
А где про это можно прочитать или посмотреть примеры?
https://adndevblog.typepad.com/autocad/2012/04/getting-started-with-accoreconsole.html
Там есть архив с видео и примерами: https://adndevblog.typepad.com/autocad/Downloads/DevTV-AccoreConsole.zip
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #6 : 25-02-2021, 20:32:32 »
Большое спасибо. Что бы мы без тебя делали.

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #7 : 26-02-2021, 19:25:45 »
Попробовал собрать библиотеку из архива и запустить ее.
Получил сообщение.
Команда: (command "_.Netload" "C:\\Temp\\AccoreConsoleDemoSource\\Demo\\bin\\Debug\\NetTest1.dll")
_.Netload Имя файла сборки: C:\Temp\AccoreConsoleDemoSource\Demo\bin\Debug\NetTest1.dll Не удалось загрузить сборку C:\Temp\AccoreConsoleDemoSource\Demo\bin\Debug\NetTest1.dll
Что это может означать? Сама сборка собралась без ошибок и сидит по указанному адресу.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #8 : 26-02-2021, 19:31:01 »
Борис_С,
Надеюсь, что acmgd.dll не используется. Если используется - убери. Ну и на всякий случай:
1) замени обратный слэш на прямой.
2) перед вызовом NETLOAD установи SECURELOAD в 0:
(setvar "SECURELOAD" 0)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #9 : 26-02-2021, 22:03:04 »
Спасибо. Помогло.
И еще один вопрос. Как осуществлять отладку программы? Можно ли как-то устанавливать точки останова в dll?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #10 : 26-02-2021, 22:10:26 »
Как осуществлять отладку программы? Можно ли как-то устанавливать точки останова в dll?
Вообще-то так же, как и для AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #11 : 27-02-2021, 21:30:53 »
Загрузил dll из скрипта bat-файла. Проект в это время был загружен в Microsoft Visual Studio, установлены точки останова.
В точки останова не попадаю, хотя dll выполняется (вижу по отладочной печати).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #12 : 27-02-2021, 21:36:00 »
Загрузил dll из скрипта bat-файла. Проект в это время был загружен в Microsoft Visual Studio, установлены точки останова.
В точки останова не попадаю, хотя dll выполняется (вижу по отладочной печати).
Видимо не грузится pdb-файл этого dll-файла.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Почему появилось исключение
« Ответ #13 : 27-02-2021, 21:41:03 »
А что у тебя здесь:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Почему появилось исключение
« Ответ #14 : 27-02-2021, 22:06:19 »
Исправил, но все равно в точку останова не попадаю.
Может быть вместо acad.exe нужно написать accoreconsole.exe?