Краткое объяснение, почему я хочу это сделать:
Я занят написанием подключаемого модуля для Autodesk Revit Architecture 2010. Тестирование кода моего подключаемого модуля чрезвычайно утомительно, так как мне приходится перезапускать Autodesk для каждого сеанса отладки, вручную загружать проект Revit, щелкать вкладку «Надстройки», а затем запускать мой подключаемый модуль. Это просто занимает слишком много времени.
Я написал второй плагин, в котором размещается интерпретатор IronPython. Таким образом, я могу поиграть с API, предоставляемым Revit. Но в конечном итоге код приходится переписывать на C# и отлаживать.
Легко, подумал я: просто загрузите DLL-плагины из скрипта IronPython и потренируйтесь. Это работает, но после загрузки я не могу перекомпилировать в Visual Studio, так как DLL теперь загружается в Revits AppDomain.
Легко, подумал я (с небольшой помощью StackOverflow): просто загрузите DLL в новый AppDomain. Увы, объекты RevitAPI нельзя маршалировать в другой домен приложения, поскольку они не расширяют MarshalByRefObject
.
Я думаю, я мог бы быть на что-то с теневыми копиями. ASP.NET, кажется, делает это. Но, читая документацию в MSDN, кажется, что я могу указать это только при создании AppDomain.
Могу ли я изменить это для текущего (по умолчанию) AppDomain? Могу ли я заставить его использовать теневые копии DLL из определенного каталога?