Недавно, при написании новой надстройки для
Revit, столкнулся с проблемой -
Revit не мог найти сборку, хотя она явно присутствовала.
Я как обычно создал
Solution в нем создал Проект типа
ClassLibrary, в котором создал команду, т.е. класс, реализующий интерфейс
IExternalCommand. В той команде я лишь вызывал форму пользовательского интерфейса. Сама же форма находилась в другой сборке. Так вот именно эту сборку
Revit и не мог найти. При этом ранее я неоднократно использовал классы, находящиеся в другой форме, и никаких проблем не было.
Причина
Причина такого поведения было то, что изначально сборку с формой я создал как
WindowsForms Application. Я создал две тестовые сборки одна из которых
ClassLibrary, а вторая -
WindowsForms Application. В обоих сборках создал тестовые классы и вызывал их в тестовой команде
Revit. Работа с классом, находящимся в сборке
ClassLibrary не вызывала никаких проблем, однако если я пытался использовать класс, который находится в другой сборке типа
WindowsForms Application, то при выполнении команды получал ошибку - сборка не найдена.
Решение проблемы
Стало очевидно, что причина пробелмы находится скорей всего в различных свойствах сборок. При детальном рассмотрении свойств двух сборок нашлись различия на вкладке Build. В сборке
WindowsForms Application Platform target по умолчанию указано
x86, а в
ClassLibrary -
AnyCPU
 |
Свойства сборки ClassLibrary |
 |
Свойства сборки WindowsForms Application |
Меняем
Platform target на AnyCPU -
profit! После этого все работает!
P.S. У меня стоит 64-битная версия Revit. На 32-битном такой ошибки скорей всего не случится.
Комментариев нет:
Отправить комментарий