Теневое копирование и загрузка смешанных библиотек C# и C++ из произвольных папок

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

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

У меня проблема в том, что когда теневое копирование включено, библиотеки 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 может обновлять во время работы приложения).

Любые идеи относительно того, как я могу убедить теневое копирование работать с пользовательской папкой И сочетанием библиотек C # / C ++ без этих проблем?


person user35444    schedule 07.11.2008    source источник
comment
Тема 7-летней давности, но до сих пор нет решения. Дайте мне знать, если у вас это работает.   -  person bschandramohan    schedule 28.10.2015


Ответы (2)


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

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

person Sunlight    schedule 07.11.2008

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

person Govert    schedule 01.03.2010