Теневое копирование и смешанная загрузка C # и C ++ DLL из произвольных папок - PullRequest
3 голосов
/ 07 ноября 2008

У меня есть проект VS 2005 C #, который использует специальную папку плагинов для загрузки дополнительных библиотек DLL (для использования в качестве узлов в процессе преобразования активов).

У меня есть смесь библиотек C # и C ++ в этой папке.

Проблема, с которой я столкнулся, заключается в том, что при включенном теневом копировании библиотеки DLL C ++ отказываются загружаться с использованием Assembly.LoadFrom. Я попытался создать собственный домен приложения и использовал Load, но это также не удалось.

Наконец, я попытался прочитать DLL в виде данных byte [] и использовать Load для этого - опять же, только DLL C # будут работать таким образом, с ошибкой "Дополнительная информация: непроверяемый код не прошел проверку политики. (Исключение из HRESULT : 0x80131402) ".

Статья в сети побудила меня попытаться использовать / clr: safe при сборке этой конкретной DLL, но потом ее просто не удалось собрать из-за тысяч ошибок в коде Microsoft ... (очевидно)

При отключенном теневом копировании LoadFrom отлично работает для всех библиотек DLL. Само приложение является плагином для Maya, и раньше оно работало с Maya 8.5, но не работало с 2008/2009 (если включено теневое копирование).

Мы действительно предпочли бы использовать теневое копирование, потому что оно предотвращает блокировки файлов DLL при запуске приложения (папка плагинов хранится в месте, которое Perforce может обновить во время работы приложения).

Есть какие-нибудь идеи относительно того, как я могу убедить Shadow Copying работать с пользовательской папкой И миксом C # / C ++ DLL без этих проблем?

Ответы [ 2 ]

1 голос
/ 07 ноября 2008

Звучит как вопрос доверия. Попробуйте получить журнал Fusion (см. в этом блоге ). Ваши библиотеки C ++ DLL не поддаются проверке, поскольку они не были скомпилированы с /clr:safe, поэтому они могут быть загружены только как полные доверия Предположительно при теневом копировании расположение кеша загрузки не имеет полного доверия.

Запуск caspol -s может привести вас в рабочее состояние, если это проблема только для разработки.

0 голосов
/ 01 марта 2010

Assembly.Load (byte [] ...) явно запрещает непроверяемые сборки (смешанный режим). Вы можете проверить проблему на Microsoft Connect .

...