Сообщество программистов Autodesk в СНГ
ADN Club => Revit API => Тема начата: Андрей Бушман от 14-11-2016, 17:04:52
-
На https://www.nuget.org не нашёл от Autodesk NuGet-пакетов для Revit 2017. Соответственно, делаю свой. В официальных мануалах (http://help.autodesk.com/view/RVT/2017/ENU/?guid=GUID-772A1144-4317-490C-B9D3-9AD657ECDBFF) вижу информацию, что в процессе разработки, как правило, достаточно подключить RevitAPI.dll и RevitAPIUI.dll. Там же указано, что помимо них, порой, может потребоваться подключение файлов RevitAPIIFC.dll, RevitAPIMacros.dll и RevitAPIUIMacros.dll. Однако в каталоге Revit 2017 я вижу несколько больше файлов, согласно фильтру RevitAPI*.dll:
(https://s13.postimg.org/6sjq1za5v/image.png) (https://postimg.org/image/6sjq1za5v/)
На скрине я подсветил те, которые в доках обозначены в качестве подключения. Могут ли мне, как разработчику планинов под Revit понадобиться и др. файлы, не подсвеченные на скрине (а может и вообще на нём отсутсвующие)? Если да, то какие? Хочу в NuGet-пакет включить всё, что может понадобиться.
P.S.
Кстати, у Revit 2017 весьма странный SDK: по завершению работы соответствующего MSI в каталоге установке SDK, по фильтру RevitAPI*.dll не нахожу ничего, приходится копировать эти файлы с компьютера, где Revit 2017 реально установлен.
-
Глухо как в танке... Ок, в пакет засунул только рекомендуемые в мануалах. Результат здесь: https://www.nuget.org/packages/Revit-2017x64.Base/1.0.0
Пакет подключает к проекту файлы RevitAPI.dll, RevitAPIUI.dll, RevitAPIIFC.dll, RevitAPIMacros.dll, и RevitAPIUIMacros.dll. В процессе подключения обозначенных сборок, пакет назначает их свойству Copy Local значение False.
-
Андрей, За весь свой опыт работы, сборки RevitAPIIFC.dll, RevitAPIMacros.dll и RevitAPIUIMacros.dll никогда не приходилось подключать. Иногда приходилось подключать сборки AdWindows.dll и UIFramework.dll. Но их использование, как и остальных сборок по маске RevitAPI* - недокументировано, поэтому использование на свой страх и риск.
-
Иногда приходилось подключать сборки AdWindows.dll и UIFramework.dll.
Ок, включу их так же в состав NuGet-пакета, но позднее, в следующей версии. Пока мне достаточно текущей его реализации.
-
Кстати, у Revit 2017 весьма странный SDK: по завершению работы соответствующего MSI в каталоге установке SDK, по фильтру RevitAPI*.dll не нахожу ничего, приходится копировать эти файлы с компьютера, где Revit 2017 реально установлен.
Собственно во всех уроках так и пишут, что нужно подключить сборки RevitAPI из папки, где установлен Revit. Не ясно зачем их куда то копировать.
Да и это правильно. Только так можно быть уверенным, что используемые методы действительно содержатся в сборке RevitAPI, с той, с которой работает сам Revit. В противном случае, можно нарваться на ситуацию, когда версия скопированных dll будет несовместима с версией Revit. Думаю именно поэтому никто и не делал сборки для nuget
-
Не ясно зачем их куда то копировать.
Существует такой способ тестирования и отладки кода: называется Remote Debugging (http://bushman-andrey.blogspot.ru/2014/03/blog-post.html). В этом случае на машине разработчика присутствует только софт, предназначенный для разработки и набор необходимых SDK. Целевые приложения, под которые пишется код, размещены на др. машинах.
Да и это правильно.
Выше я указал причину, почему это как раз-таки неправильно. Кстати, SDK для AutoCAD такого косяка не имеет - все необходимые заглушки присутствуют в составе SDK. Хочешь сказать, что это неправильно? :) Вопрос риторический.
В противном случае, можно нарваться на ситуацию, когда версия скопированных dll будет несовместима с версией Revit.
Нельзя на неё нарваться, если глаза на месте: версии целевых приложений, как правило, указываются в наименованиях NuGet-пакетов. Кстати, в своих кривых (http://bushman-andrey.blogspot.ru/2016/07/nuget-autocad-net-api.html) NuGet-пакетах, которые Autodesk выпускает для AutoCAD они в названии пакетов как раз и указывают целевые версии AutoCAD. Ничто не мешает делать то же самое и для Revit.
Думаю именно поэтому никто и не делал сборки для nuget
Поскольку все процитированные мною выше аргументы не соответствуют действительности, то и данная логика в этом случае не работает. Да я и не спрашивал причину отсутствия оных, т.к. она для меня и так вполне очевидна...