Я пытаюсь развернуть веб-проект, который использует определенную библиотеку (в данном случае Chilkat), на веб-хосте (appharbor.com). Проблема в том, что библиотеке требуется среда выполнения Visual Studio C ++ 2010 (http://www.cknotes.com/?p=311). У меня вопрос: как правильно развернуть эту среду выполнения?
1. Выбор метода развертывания
На моем локальном компьютере разработки установлена среда выполнения, но у меня есть только git push доступ к среде размещения.
На основе MSDN есть три варианта для развертывания среды выполнения:
- Используйте распространяемый пакет (рекомендуется)
- Используйте модули слияния (требуются права администратора)
- Развернуть с приложением
Вариант 3 - единственный, который я могу сделать с этим хостом, поскольку у меня нет административного доступа к серверу.
2. Определение того, какие библиотеки следует развернуть
На странице MSDN указано, что библиотеки DLL должны находиться в «Program Files \ Microsoft Visual Studio 10.0 \ VC \ Redist». В моем случае каталог Redist не существует в этом месте (работает в 64-разрядной версии, поэтому я проверил как «Program Files», так и «Program Files (x86)»).
Я разархивировал распространяемый пакет и vs_red.cab внутри него, чтобы найти список содержащихся dll: - atl100 - mfc100 (+ языковые варианты) - mfc100u - msvcp100 - msvcr100 - vcomp100 - msdia71
В то же время я проверил библиотеку в отражателе, чтобы увидеть, на что ссылается: - Microsoft.VisualC (.net) - KERNEL32.dll (родной) - MSVCR100.dll (родной) - ... и одна загадочная библиотека без имени . Отображается как модуль с пустым текстом.
Боковое примечание: используемая здесь библиотека chilkat доступна в версиях x64 и x86. Я выполнил эти задачи с x86 только потому, что целевая система кажется x86. (Развертывание x64 приводит к ошибке «Была предпринята попытка загрузить программу с неправильным форматом».)
3. Поиск DLL для развертывания
DLL в распакованном vc_red.cab неправильно названы, поэтому я решил найти библиотеки DLL на жестком диске. Поиск atl100 показал три расположения: system32, syswow64 и как часть каталога приложения.
Все файлы, упомянутые выше, были в system32, за исключением: - msdia71 (native) - это связано с отладкой и вообще отсутствует на моем диске, поэтому я предполагаю, что это не нужно. - Microsoft.VisualC (.net) - нашел это в GAC в правильной версии (10.x).
(Я не копировал KERNEL32.dll, потому что это встроенная библиотека Windows.)
4. Добавление библиотек в проект
Библиотека VisualC .net была добавлена в качестве справочной. Собственные библиотеки были добавлены в корень моего веб-приложения, а свойства были установлены на «Действие при сборке: содержимое» и «Копировать в вывод: всегда». После сборки библиотеки DLL появились рядом с библиотеками .net в папке bin, как и ожидалось.
Но при развертывании и запуске я получаю сообщение об ошибке: «Не удалось загрузить файл или сборку» или одну из ее зависимостей. Указанный модуль не может быть найден.
Вы можете увидеть результат сборки проекта здесь, и я могу заметить, что необходимые мне dll копируются в выходной каталог, но все же где-то есть ошибка. У кого-нибудь есть идея? Или лучший подход к отладке этого? Или я делаю глупость :)?