четверг, 15 декабря 2011 г.

Could not load file or assembly при вызове команды

Недавно, при написании новой надстройки для 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-битном такой ошибки скорей всего не случится.

Комментариев нет:

Отправить комментарий