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

ADN Club => Revit API => Тема начата: Дамир от 06-08-2014, 00:10:11

Название: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 06-08-2014, 00:10:11
Друзья, приветствую!
Прошу помочь в следующем вопросе. На Revit 2014 надстройка успешно работала. Есть ее исходники (проект). На 2015 работать перестала -  при выполнении (вызове во внешних) инструментах появляется окно ошибки "Ошибка: необрабатываемое исключение" - фатал закрывающий Revit с извинениями.

Решил перекомпелировать библиотеку. В Visual Studio добавил библиотеки RevitAPI и RevitAPIUI, все как положено. При сборке нет ошибок, но есть предупреждения:

1>------ Сборка начата: проект: WallsArea2014, Конфигурация: Debug x64 ------
1>C:\Users\damir\Downloads\11\WallsArea2014\AreaCalculator.cs(184,56,184,57): warning CS0642: Возможно, ошибочный неопределенный оператор
1>C:\Users\damir\Downloads\11\WallsArea2014\CalcAreaAction.cs(43,43,43,74): warning CS0618: "Autodesk.Revit.DB.Element.get_Parameter(string)" является устаревшим: "This property is obsolete in Revit 2015, as more than one parameter can have the same name on a given element. Use Element.Parameters to obtain a complete list of parameters on this Element, or Element.GetParameters(String) to get a list of all parameters by name, or Element.LookupParameter(String) to return the first available parameter with the given name."
1>  WallsArea2014 -> C:\Users\damir\Downloads\11\WallsArea2014\bin\x64\Debug\WallsArea2014.dll
========== Сборка: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========

Надстройка должна делать следующее:
создаю помещение в четырех стенах например, есть параметр "Площадь стен".
Надстройка показывает на форме текста с  размерами стен, а в параметр записывает знание площади.

Сейчас вижу появление пустой формы. И после фатал...

Что делать? Заранее благодарю за советы
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 06-08-2014, 15:45:20
Дамир, привествуем на нашем форуме!

Почти уверен, что это из-за использования устаревших методов.
Замените вызов устаревшего метода get_Parameter на Element.LookupParameter(String), как описано в предупреждении.

Попробуйте для начала, если не поможет, то будем дальше думать.

Еще не помешает установить последнее обновление (http://adn-cis.org/revit-2015-obnovlenie-3.html). Но для начала все же избавьтесь от устаревшего параметра.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 06-08-2014, 16:06:03
Благодарю, сегодня же проверю оба совета, опишу по результатам
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 06-08-2014, 16:12:35
Замените вызов устаревшего метода get_Parameter на Element.LookupParameter(String), как описано в предупреждении.

Правильно ли я Вас понял с заменой устаревшего метода?
Была строка: Parameter parameter = r.get_Parameter("Площадь стен");
Строк стала: Parameter parameter = r.LookupParameter("Площадь стен");
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 06-08-2014, 17:19:24
Да, верно.

Кстати, а параметр с названием "Площадь стен", существует в единственном экземпляре?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 06-08-2014, 17:29:52
Да. Параметр существует в единственном экземпляре. Работаю с готовым шаблоном.
Обновление произвел еще вчера с аналогичного дистрибутива Autodesk_Revit_2015-x64_Update3.exe (как выяснилось)

Метод изменил как писал выше. Проблема осталась...
Что делать?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 06-08-2014, 17:39:07
Предупреждения больше не появляются?

С первым предупреждением желательно разобраться, либо удостовериться, что она точно не критическое (по приведенному описанию понять невозможно в чем причина).

А в целом подход стандартный. Нужно выяснить какой метод рушит Revit.

В режиме отладки ставьте точку остановы на первом же методе команды и пошагово выполняйте ваш код. Или же Revit падает еще до выполнения команды, что даже в отладку зайти не удается?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 06-08-2014, 17:54:37
Прошу прощения, что не уточнил после изменения метода соответствующее ему предупреждение исчезло.
Осталось одно предупреждение:
 1>------ Перестроение всех файлов начато: проект: WallsArea2014, Конфигурация: Debug x64 ------
1>C:\Users\damir\Downloads\11\WallsArea2014\AreaCalculator.cs(184,56,184,57): warning CS0642: Возможно, ошибочный неопределенный оператор
1>  WallsArea2014 -> C:\Users\damir\Downloads\11\WallsArea2014\bin\x64\Debug\WallsArea2014.dll
========== Перестроение всех: успешно: 1, с ошибками: 0, пропущено: 0 ==========

Предупреждение ведет на следующий фрагмент кода:
Код - C# [Выбрать]
  1. if (orgIsInside && destIsInside)
  2.                     ret.Add(dest);
  3.                 else if (orgIsInside && !destIsInside)
  4.                     ret.Add(crossingPt);
  5.                else if (!orgIsInside && !destIsInside);
  6.                 else {
  7.                     ret.Add(crossingPt); ret.Add(dest);
  8.                 }

подчеркнул указанную строку. Visual Studio ссылается на последнюю точку с запятой (;) в подчеркнутой строке.




2. По поводу режима отладки:
Наверно я что то не понимаю. Мой порядок действий:
- собираю dll в режиме Debug
- помещаю dll в нужную папку
- открываю Revit
- Надстройки / Внешние инструменты / Мое решение
Далее вижу мигает моя форма (где должен быть лог), она пустая и через секунду окно ошибки самого Revit.
Прошу уточнить в какой момент мне необходимо осуществлять отладку и как. Возможно мне пока не хватает знаний, но думаю я пойму.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 06-08-2014, 18:17:03
Точка с запятой действительно лишняя. Visual Studio не зря ругается.

По поводу отладки. Обучать мастерству работы с Visual Studio я конечно вас не буду:). Судя по ответу что такое режим отладки вы не знаете.

Режим отладки позволяет выполнять код по шагам, с просмотром значений переменных на каждом шаге.
В уроках по программированию в Rеvit (http://adn-cis.org/forum/index.php?topic=284.0) кстати есть урок по отладке (http://www.autodesk.ru/adsk/servlet/index?siteID=871736&id=21788696). рекомендую ознакомиться.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Александр Ривилис от 06-08-2014, 18:26:46
В Visual Studio добавил библиотеки RevitAPI и RevitAPIUI, все как положено
Надеюсь они из состава Revit 2015?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 06-08-2014, 18:31:52
Надеюсь они из состава Revit 2015?
Я это не стал уточнять, так как в предупреждении говорится, что This property is obsolete in Revit 2015
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Александр Ривилис от 06-08-2014, 18:42:35
Точно. Это я пропустил. Каюсь.
P.S.: Кстати, по поводу точки с запятой я не был бы так уверен. Это может быть не слишком удачный стиль написания оператора "if - else".
И вообще весь этот if очень странный.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 06-08-2014, 19:14:18
Точка с запятой это не ошибка конечно. Это всего лишь значит что если условие в if равно true, то ничего не произойдет.
Наверно мне правильнее было сказать, что точка с запятой не лишняя, а просто такой стиль написания запутаный и не явный, что аж Visual Studio ругается:)
Но причина падения Revit явно не в ней.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 07-08-2014, 09:01:44
По поводу точки с запятой: код писал не я. При отсутствии точки запятой VS ругается уже ошибкой.
По поводу отладки: что такое отладка я знаю, просто не понятно как я проконтролирую падение Revit'a при отладке на VS? (1 вопрос)

Насчет того, что падение Revit'a не связано с ошибкой  в точке запятой - согласен!

Благодарю за предоставленные мне ссылки. Как по ним и начал заниматься, однако, друзья-ревитовцы попросили разобраться с проблемой, которой собственно и посвящен этот пост.
С Вашего позволения ознакомлюсь с уроком отладки и постараюсь ее реализовать. По результатам отпишу.

Еще раз спасибо!
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 07-08-2014, 09:35:29
По поводу отладки: что такое отладка я знаю, просто не понятно как я проконтролирую падение Revit'a при отладке на VS? (1 вопрос)
Дамир, после того как вы подключите отладчик к процессу Revit, просто выполняйте ваш код по шагам. Скорей всего на выполнении одного из методов возникнет необрабатываемое Revit'ом исключение и он упадет. В зависимости от того, что это за метод, будем искать решение.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 07-08-2014, 09:59:15
Да, я понял. Договорились. Спасибо
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 15-08-2014, 08:56:21
Дамир,  добрый день.
Скажите, у вас получилось отладить код и узнать в чем была причина падения Revit'а?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 17-08-2014, 00:09:32
Воспользовался Ваше рекомендацией по уроку отладки кода.  Прописал запуск Revit'a в проекте. Как я понял, необходимо в файле манифеста прописать путь к новой dll, поскольку отладка собирает новое решение.
Цитировать
Поскольку теперь мы начнем отладку кода плагина, Visual C# Express создает отладочную версию DLL-файла плагина .NET. Для того чтобы Revit прочитал отладочную версию DLL-файла вместо финальной версии, созданной на первом уроке, необходимо изменить путь к DLL-файлу в манифесте следующим образом (изменения отмечены полужирным шрифтом):


При запуске отладки открывается окно приветствия Revit и тут же закрывается... На этом я и остановился. Не знаю, что делать дальше
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 17-08-2014, 00:30:06

Повторил все действия теперь другой результат.


Мои действия:
1. В файле WallsArea2014.csproj проекта добавил строку:
<StartAction>Program</StartAction>
   <StartProgram>C:\Program Files\Autodesk\Revit 2015\Revit.exe</StartProgram>
  </PropertyGroup>
2. В файле манифеста WallsArea2014.addin заменил строку на:

<AddIn Type="Command">
    <Assembly>C:\Users\damir\Downloads\11\WallsArea2014\bin\x64\Debug\WallsArea2014.dll</Assembly>
    <ClientId>86c9fb46-b50f-4612-9152-e24fef5ecdab</ClientId>
По этому пути собирается новая dll.


В итоге при запуске отладки VS собирает новое решение не выдает ошибок, а пишет следующее:


Повторил все действия заново.
VS написал следующее:
Цитировать
Программа "[11848] Revit.exe" завершилась с кодом -529697949 (0xe06d7363) 'Microsoft C++ Exception'.


Окно запуска Revit'a просто мигает и все. Сам Revit не грузится. Зато при запуске Revit'a вручную и выполнении команды также появляется нужное окошко лога, но без фатальной ошибки. Однако, окошко уведомлений по прежнему пустое и площадь стен не считается.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Александр Ривилис от 17-08-2014, 02:22:26
1) Какая версия VS используется?
2) Для какой платформы .NET (4 или 4.5) выполняется компиляция?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 17-08-2014, 11:54:02
Прошу прощения, фатал все тки появляется. Но пока вопрос в другом. Хотелось бы осуществить отладку корректно.


1) Какая версия VS используется?
2) Для какой платформы .NET (4 или 4.5) выполняется компиляция?
Visual Studio Express 2013 for Desktop
Framework 4.5


По этой ссылке  (https://drive.google.com/file/d/0B7WQynP0e6CrUVlMYUFnMlhMZzQ/edit?usp=sharing)(gif, 26 mb) мои действия в Revit

Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 18-08-2014, 09:55:49
Дамир, добрый день,
Попробуйте создать новый пустой проект, и на нем уже пробовать запустить надстройку в режиме отладки. Я вложил к посту такой проект. Подправьте в нем пути к файлаи RevitAPI.dll и RevitAPIUI.dll и пути в файле манифеста.
Предварительно удалите файл манифеста вашей надстройки из папки C:\Users\UserName\AppData\Roaming\Autodesk\Revit\AddIns\2015 чтобы исключить ее влияние.  После этого уже попробуйте запустить тот почти пустой проект в режиме отладки. Сообщите результат.

Также не могли бы вы выложить код команды, т.е. код класса, реализующего интерфейс IExternalCommand? Есть у меня одно предположение, почему Revit может падать.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 18-08-2014, 10:05:52

Виктор Чекалин, хорошо. Попробуй сделать как Вы сказали.
Здесь ссылка (https://drive.google.com/file/d/0B7WQynP0e6CrZFEza0VOLU4tclk/edit?usp=sharing) на весь проект.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 18-08-2014, 10:33:09
Дамир, я посмотрел код. Мои подозрения подтвердились.
Код - C# [Выбрать]
  1.             ProgressDlg dlg = new ProgressDlg();
  2.             dlg.ActiveDocument = commandData.Application.ActiveUIDocument.Document;
  3.             dlg.Show();
  4.             dlg.RunWorker();
  5.  
  6.             return Result.Succeeded;

Вы вызываете методы RevitAPI из другого потока. RevitAPI не поддерживает многопоточность.
Если говорить вкратце, то есть только три возможных места, где можно безопасно вызывать методы RevitAPI:

В вашем коде вы отображаете немодальную форму (метод Show). После вызова метода Show код продолжает выполняться дальше, и в итоге вы выходите из контекста метода Execute и в другом потоке вызываете методы RevitAPI.

Сразу отвечу на вопрос почему это работало в Revit 2014. Строго говоря, Autodesk и ранее говорил о том что вызов методов из небезопасных контекстов не гарантируется и что делать так ни в коем случе нельзя. Иными словами имеющийся код мог не работать при определенных обстоятельствах и в Revit 2014 и в худшем случае вообще испортить весь файл модели с невозможностью последующего открытия.

Решение только одно - избавляйтесь от многопоточности. В вашем случае от BackgroundWorker.

Как вариант, можно попробовать изменить ваш код на вот такой:
Код - C# [Выбрать]
  1.             ProgressDlg dlg = new ProgressDlg();
  2.             dlg.ActiveDocument = commandData.Application.ActiveUIDocument.Document;            
  3.             dlg.RunWorker();
  4.             dlg.ShowDialog();
  5.  
  6.             return Result.Succeeded;

Т.е. использовать все же модальную форму, но результат не гарантируется.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 18-08-2014, 10:38:47
Виктор Чекалин, благодарю. Если честно я пока не знаток C# (для того и начал изучение этой темы), поэтому Ваше предположение понял в общей форме. Постараюсь воспользоваться Вашей рекомендацией по мере своих сил. По мере вопросов отпишу.
Как я понял, пока я заменю код на Ваш вариант.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 18-08-2014, 20:52:17
Заменил код как Вы и указали. Файл манифеста корректен, dll лежит по верному пути. Ошибка повторилась
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 18-08-2014, 21:16:19
Жаль. :( Значит все же придется избавиться от многопоточности. Говоря простым языком, показать процесс построения отчета не получится.
Поместите код, который у вас выполнялся с помощью BackgroundWorker (BackgroundWorker.DoWork) в обработку события Load или Shown для формы.

Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 18-08-2014, 23:55:10
Говоря простым языком, показать процесс построения отчета не получится
я так понял не получится осуществить отладку?

Поместите код, который у вас выполнялся с помощью BackgroundWorker (BackgroundWorker.DoWork) в обработку события Load или Shown для формы.
фрагмент я нашел, но, если честно, не знаю как именно поместить его под обработку этих событий. Наверно в ProgressDlg.cs эти события руками создать?
Прошу прощения за простые вопросы, думаю мне не хватает знаний C#.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 19-08-2014, 09:03:07
Нет, отладка здесь не причем. Кстати отладка многопоточных приложений тоже требует определенного навыка. Но, так как мы разобрались в причинах, то пока отладка вам не нужна.
Попробую объяснить простым языком.
Многопоточность применяется для того, чтобы выполнять некие длительные действия в приложении, при этом само приложение остается доступным и в нем можно продолжать работать. В вашем случае, после запуска формы вы начинаете строить отчет (то самое длительное действие) и отображаете так называемый ProgressBar, отображающий процесс построения отчета.
В случае избавления от многопоточности, код по построению отчета будет выполняться синхронно, т.е. форма вашего приложения не будет доступна до тех пор, пока выполняется построение отчета. Для пользователя это будет выглядеть как будто программа "зависла". После того как отчет построится, пользователь все же увидет форму с данными.

Цитировать
фрагмент я нашел, но, если честно, не знаю как именно поместить его под обработку этих событий. Наверно в ProgressDlg.cs эти события руками создать?
Прошу прощения за простые вопросы, думаю мне не хватает знаний C#
Открываете вашу форму в Visual Studio. В редакторе дважды щелкаете на заголовок формы (там где иконка, заголовок ProgressDlg и кнопки сворачивания, закрытия и минимизации). После этого у вас создается подписка на событие Load и генерируется код:
Код - C# [Выбрать]
  1.         private void ProgressDlg_Load(object sender, EventArgs e)
  2.         {
  3.  
  4.         }

В методе Execute класса CalcAreaAction удаляете параметр worker и удаляете в этом методе все что связано с worker.

Метод обработки события Load должен получиться примерно такой:
Код - C# [Выбрать]
  1.         private void ProgressDlg_Load(object sender, EventArgs e)
  2.         {
  3.             CalcAreaAction act = new CalcAreaAction();
  4.             act.Execute(ActiveDocument);
  5.             m_log.Text = act.Log;
  6.             m_close.Enabled = true;
  7.             m_logToFile.Enabled = true;
  8.         }

Код команды после этого должен вылдяеть так (не должно быть вызова метода RunWorker):
Код - C# [Выбрать]
  1.         public Result Execute(ExternalCommandData commandData,
  2.             ref string message, ElementSet elements)
  3.         {
  4.             ProgressDlg dlg = new ProgressDlg();
  5.             dlg.ActiveDocument = commandData.Application.ActiveUIDocument.Document;
  6.             dlg.ShowDialog();
  7.             //dlg.RunWorker();
  8.  
  9.             return Result.Succeeded;
  10.         }
           
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 22-08-2014, 16:44:38
Благодарю, Вас за помощь. 
Постараюсь вернуться к Вашей рекомендации. Небольшая заминка со временем. Отпишу по результатам. Еще раз спасибо
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 30-08-2014, 14:20:06
Не уверен в правильности выполненных мною действий, по скольку до до конца не понимал, что именно делаю. Выполнял действия по Вашей инструкции.

Это полный код ProgressDlg.cs. Где я допустил ошибки и что делать дальше?
Код - C# [Выбрать]
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10.  
  11.  
  12. //using Autodesk.Revit.DB;
  13.  
  14.  
  15. namespace WallsArea
  16. {
  17.     public partial class ProgressDlg : Form
  18.     {
  19.         public ProgressDlg()
  20.         {
  21.             InitializeComponent();
  22.         }
  23.  
  24.  
  25.         public Autodesk.Revit.DB.Document ActiveDocument { get; set; }
  26.  
  27.  
  28.         private void LogToFile(object sender, EventArgs e)
  29.         {
  30.             SaveFileDialog dlg = new SaveFileDialog();
  31.             dlg.Filter = "log files (*.log)|*.log|All files (*.*)|*.*";
  32.             dlg.FilterIndex = 1;
  33.             dlg.RestoreDirectory = true;
  34.  
  35.  
  36.             if (DialogResult.OK != dlg.ShowDialog(this)) { return; }
  37.  
  38.  
  39.             using (StreamWriter writer = new StreamWriter(dlg.FileName)) {
  40.                 writer.WriteLine(DateTime.Now + "\tЖурнал операций расчета площади стен");
  41.                 writer.WriteLine();
  42.  
  43.  
  44.                 string[] lines = m_log.Lines;
  45.                 for (long i = 0; i < lines.Length; ++i) {
  46.                     writer.WriteLine(lines[i]);
  47.                 }
  48.                 writer.Close();
  49.             }
  50.         }
  51.  
  52.  
  53.         private void CloseDlg(object sender, EventArgs e)
  54.         {
  55.             if (worker.IsBusy) { return; }
  56.  
  57.  
  58.             Close();
  59.         }
  60.  
  61.  
  62.         private void OnDoWork(object sender, DoWorkEventArgs e)
  63.         {
  64.             BackgroundWorker worker = sender as BackgroundWorker;
  65.             if (null == worker) { return;  }
  66.  
  67.  
  68.             Autodesk.Revit.DB.Document doc = e.Argument as Autodesk.Revit.DB.Document;
  69.             if (null == doc) { return; }
  70.  
  71.  
  72.             CalcAreaAction act = new CalcAreaAction();
  73.             act.Execute(doc, worker);
  74.             e.Result = act.Log;
  75.         }
  76.  
  77.  
  78.         public void RunWorker()
  79.         {
  80.             m_close.Enabled = false;
  81.             m_logToFile.Enabled = false;
  82.             m_log.Enabled = false;
  83.             this.UseWaitCursor = true;
  84.             worker.RunWorkerAsync(ActiveDocument);
  85.         }
  86.  
  87.  
  88.         private void OnClosing(object sender, FormClosingEventArgs e)
  89.         {
  90.             if (worker.IsBusy) { e.Cancel = true; }
  91.         }
  92.  
  93.  
  94.         private void OnProgress(object sender, ProgressChangedEventArgs e)
  95.         {
  96.             m_progress.Value = e.ProgressPercentage;
  97.             this.Text = e.UserState as string;
  98.         }
  99.  
  100.  
  101.         private void OnWorkerComplete(object sender, RunWorkerCompletedEventArgs e)
  102.         {
  103.             m_log.Text = e.Result as string;
  104.             m_log.Enabled = true;
  105.             m_close.Enabled = true;
  106.             m_logToFile.Enabled = true;
  107.             this.UseWaitCursor = false;
  108.         }
  109.  
  110.  
  111.         private void ProgressDlg_Load(object sender, EventArgs e)
  112.             {
  113.                 CalcAreaAction act = new CalcAreaAction();
  114.                 act.Execute(ActiveDocument);
  115.                 m_log.Text = act.Log;
  116.                 m_close.Enabled = true;
  117.                 m_logToFile.Enabled = true;
  118.             }
  119.         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
  120.         {
  121.             ProgressDlg dlg = new ProgressDlg();
  122.             dlg.ActiveDocument = commandData.Application.ActiveUIDocument.Document;
  123.             dlg.ShowDialog();
  124.             //dlg.RunWorker();
  125.  
  126.  
  127.             return Result.Succeeded;
  128.         }
  129.     }
  130. }
  131.  
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Александр Ривилис от 31-08-2014, 15:12:56
Виктор Чекалин сейчас в отпуске. По возвращении ответит. Надеюсь, что этот вопрос не настолько спешный.
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Дамир от 31-08-2014, 15:54:36
Благодарю! Буду ждать!
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 10-09-2014, 19:34:51
Дамир, извиняюсь за задержку.

Проверить работоспособность кода данный момент нет, но на первый взгляд все верно. Некоторые методы класса теперь стали не нужны, но это не суть.

А что в результате? Надстройка по-прежнему не работает? В классе CalcAreaAction убрали многопоточность?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Пашин Евгений от 20-10-2015, 07:17:35
У меня точно такая же проблема! Только не с addin а с самой отладкой!

Программа "[5000] Revit.exe" завершилась с кодом -529697949 (0xe06d7363) 'Microsoft C++ Exception'.

С потоками не работаю, да и если бы работал, то это было бы странно, что Revit не умеет работать с потоками.
Создал просто пустой проект и ошибка та же самая. То есть, здесь явно проблема не с потоками.

Revit 2015 / Visual Studio 2013 / .NET 4.5 / Debug , если делаю Release, то ошибка такая: Программа "[3236] Revit.exe" завершилась с кодом -529697949 (0xe06d7363) 'Microsoft C++ Exception'.

С этим надо что-то делать, а то я завис на том, что не могу отслеживать ошибки и значения переменных... крайне не удобно!
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Пашин Евгений от 20-10-2015, 07:58:04
Попробовал отладку с запуском внешнего приложения и разрешением отладки машинного кода и вот что произошло:
1. Стали подгружаться символы для библиотек Revit-а.
2. Revit запустился
3. Однако при нажатии какой-нибудь кнопки что-то подгружается.
4. При повторном запуске быстрее запускается, но при возникновении ошибки я не могу увидеть, в каком месте она находится... можно лишь дизассемблированный код посмотреть.

Как дальше-то быть?
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 20-10-2015, 09:19:46
Как дальше-то быть?
Зайти в настройки Visual Studio, найти пункт Debugging и поставить галочку Use Managed Compatibility Mode
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs4.postimg.org%2Fkpqso6y21%2FOptions.jpg&hash=9e3e0b530ebebc26b85db1abbbb73b3a) (http://postimg.org/image/kpqso6y21/)
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Пашин Евгений от 20-10-2015, 10:36:10
Шикарно! Все работает! Спасибо  :D

Только для VB это: Меню Отладка -> Параметры и настройки -> На ветке Отладка -> Параметр Использовать режим совместимости управляемого кода
Название: Re: На Revit 2015 перестал работать add-in
Отправлено: Виктор Чекалин от 20-10-2015, 23:16:08
Только для VB это: Меню Отладка -> Параметры и настройки -> На ветке Отладка -> Параметр Использовать режим совместимости управляемого кода
Поправочка. Это не для VB, а для русской версии Visual Studio. Никогда не пользовался и не буду пользоваться локализованной версией Visual Studio, поэтому не знаю как оно там