2014-01-07 2 views
0

У меня есть простое приложение C# 4.5.1 x64, которое вызывает неуправляемые DLL через обертку C++. Приложение отлично работает на моей машине разработки. Если я копирую в Windows Server 2008 или Windows Server 2012 (с установленной Framework 4.5.1), я получаю сообщение об ошибке, которое обертка не будет загружать.Запуск приложения на машине dev не запускается при развертывании

Я установил DependencyWalker на машине развертывания и я получаю это:

LoadLibraryExW("MyWrapper.dll", 0x000.., LOAD_WITH_ALTERED_SEARCH_PATH) called from ... 
Loaded "MyWrapper.dll" at ... Successfully hooked module. 
Loaded "XX.dll" at ... Successfully hooked module. (Dependency for MyWrapper.dll) 
Loaded "YY.dll" at ... Successfully hooked module. (Dependency for MyWrapper.dll) 
Unloaded "MyWrapper.dll" 
Unloaded "XX.dll" 
Unloaded "YY.dll" 
LoadLibraryExW("MyWrapper.dll", 0x000.., LOAD_WITH_ALTERED_SEARCH_PATH) returned null. The specified module cannot be found. 

Кто-нибудь знает, почему все загружается затем выгружается, а затем не может быть найден?

+0

Вы уверены, что время выполнения установлено на машине развертывания? Это может помочь http://stackoverflow.com/questions/9052694/visual-studio-2010-msvcr-dependency-removal – dousin

+0

Похоже, что обертка действительно загрузилась, но после загрузки вашего приложения она перешла и выгрузила их. Происходит ли другая ошибка? Как выглядит ваш код? –

+0

Установлена ​​среда исполнения @dousin .NET Framework. – phil

ответ

2

Убедитесь, что у вас есть все необходимые распространяемые компоненты (vcredist.exe), и вы развертываете выпускную сборку.

Любая неуправляемая dll c/C++, а также ссылки C++/cli dll на msvcr. Он автоматически устанавливается с Visual Studio на машине разработчика. Он должен быть установлен на машине развертывания вместе с приложением. Обязательно перераспределите правильную версию vcredist.exe, которая соответствует вашей версии (и пакету обновления) VS. Для vs2008 он находится в% ProgramFiles% \ Microsoft SDK \ Windows \ v6.0A \ Bootstrapper \ Packages). Примечание. Уклонение зависимостей не показывает отсутствующую dll, если она загружается с помощью LoadModule(), или методы загружаются с использованием [DllImport («Sample.dll»)] в C#. В этом случае откройте неуправляемую dll прямо в Walker Dependency и проверьте отсутствие депо. Убедитесь, что неуправляемая dll находится в пути поиска вашего приложения.

Смежные вопросы