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

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 03-09-2015, 13:38:44

Название: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Андрей Бушман от 03-09-2015, 13:38:44
В процессе эксплуатации этой (http://bushman-andrey.blogspot.ru/2014/12/explodeallproxy-removeallproxy.html) утилиты обнаружилось очередное (http://bushman-andrey.blogspot.ru/search/label/accoreconsole) кривое поведение accoreconsole.exe, обозначенное в названии темы.

Из acad.exe загружаю acad.proxy.dll или acad.proxy.R19.0.dll. Консольный вывод для обоих случаев одинаков:

Цитировать
Command: NETLOAD
acad.proxy.R19.0.dll
© Andrey Bushman, 2015

Commands:
proxy - get count of ProxyEntity and ProxyObject in the current Database.
xProxy - explode all proxy in the current Database.
rmProxy - remove all ProxyEntities and ProxyObjects in the current Database.
rmScales - remove all unused annotation scales in the current Database.

Теперь из accoreconsole.exe загружаю accore.proxy.dll или acad.proxy.R19.0.dll. Консольный вывод для обоих случаев одинаков (но отличается от ранее показанного):

Цитировать
Command: netload
Command: netload
Assembly file name: C:\public\Debug\proxy\accore.proxy.dll
Assembly file name: C:\public\Debug\proxy\accore.proxy.dll

acad.proxy.R19.0.dll


Commands:
proxy - get count of ProxyEntity and ProxyObject in the current Database.
xProxy - explode all proxy in the current Database.
rmProxy - remove all ProxyEntities and ProxyObjects in the current Database.

Как видим, в случае accoreconsole.exe в консоль не была выведена информация о команде rmScales.

Код вывода информации в консоль прост:
Код - C# [Выбрать]
  1. public void Initialize() {
  2.   Document doc = cad.DocumentManager.MdiActiveDocument;
  3.   if (null == doc)
  4.     return;
  5.   Editor ed = doc.Editor;
  6.   ed.WriteMessage("\n{0}\n", Path.GetFileName(this.GetType().Assembly
  7.             .Location));
  8.   ed.WriteMessage("{0}\n\n", "© Andrey Bushman, 2015");
  9.   ed.WriteMessage("{0}:\n", "Commands");
  10.   ed.WriteMessage("{0}\n", "proxy - get count of ProxyEntity and " +
  11.       "ProxyObject in the current Database.");
  12.   ed.WriteMessage("{0}\n", "xProxy - explode all proxy in the " +
  13.       "current Database.");
  14.   ed.WriteMessage("{0}\n", "rmProxy - remove all ProxyEntities and "
  15.       + "ProxyObjects in the current Database.");
  16.   ed.WriteMessage("{0}\n\n", "rmScales - remove all unused " +
  17.       "annotation scales in the current Database.");
  18. }
Обозначенное поведение наблюдаю в AutoCAD 2013-2016. Сильно подозреваю, что это очередной баг.
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Александр Ривилис от 03-09-2015, 13:44:30
Выводи "\n" в конце.
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Андрей Бушман от 03-09-2015, 13:45:34
Выводи "\n" в конце.
Посмотрите внимательней на мой код.
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Александр Ривилис от 03-09-2015, 13:48:36
Посмотрите внимательней на мой код.
После:
Код - C# [Выбрать]
  1. ed.WriteMessage("{0}\n\n", "rmScales - remove all unused " +
  2.       "annotation scales in the current Database.");
добавь строку:
Код - C# [Выбрать]
  1. ed.WriteMessage("\n ");
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Андрей Бушман от 03-09-2015, 13:56:20
После:
Код - C# [Выбрать]
  1. ed.WriteMessage("{0}\n\n", "rmScales - remove all unused " +
  2.       "annotation scales in the current Database.");
добавь строку:
Код - C# [Выбрать]
  1. ed.WriteMessage("\n ");
фокус не удался.
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Андрей Бушман от 03-09-2015, 14:00:35
Если заменить
Код - C# [Выбрать]
  1. ed.WriteMessage("{0}\n\n", "rmScales - remove all unused " +
  2.           "annotation scales in the current Database.");
на
Код - C# [Выбрать]
  1. ed.WriteMessage("{0}\n", "rmScales - remove all unused " +
  2.           "annotation scales in the current Database.");
  3. ed.WriteMessage("\n ");
то вывод успешно отправляется в консоль.

Т.о. это явно очередной баг accoreconsole.exe.  :(
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Александр Ривилис от 03-09-2015, 14:02:59
т.е. если убрать последний символ переноса строки, то вывод успешно отправляется в консоль.
Точно. Я обратил внимание, что у тебя не только про rmScales не вывелось в командную строку, но и "© Andrey Bushman, 2015" тоже. Как ты это не заметил? ;)
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Андрей Бушман от 03-09-2015, 14:03:57
Как ты это не заметил?  ;)
Это я проморгал. :) В ADN будете сообщать?
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Александр Ривилис от 03-09-2015, 14:07:26
В ADN будете сообщать?
Да. Уже сообщил.
Название: Re: accoreconsole.exe "проглатывает" консольный вывод
Отправлено: Александр Ривилис от 10-09-2015, 13:46:00
Баг признали и взяли в работу.