Как развернуть Visual C ++ Runtime 2010 в библиотеке bin веб-приложения?

Я пытаюсь развернуть веб-проект, который использует определенную библиотеку (в данном случае Chilkat), на веб-хосте (appharbor.com). Проблема в том, что библиотеке требуется среда выполнения Visual Studio C ++ 2010 (http://www.cknotes.com/?p=311). У меня вопрос: как правильно развернуть эту среду выполнения?

1. Выбор метода развертывания

На моем локальном компьютере разработки установлена ​​среда выполнения, но у меня есть только git push доступ к среде размещения.

На основе MSDN есть три варианта для развертывания среды выполнения:

  1. Используйте распространяемый пакет (рекомендуется)
  2. Используйте модули слияния (требуются права администратора)
  3. Развернуть с приложением

Вариант 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 копируются в выходной каталог, но все же где-то есть ошибка. У кого-нибудь есть идея? Или лучший подход к отладке этого? Или я делаю глупость :)?


person Alex Duggleby    schedule 15.07.2011    source источник
comment
У меня точно такая же проблема (5 лет спустя) .. как вы решили?   -  person Dan B    schedule 16.01.2017
comment
К сожалению, я этого не сделал. Вместо этого использовала управляемую библиотеку.   -  person Alex Duggleby    schedule 15.02.2017
comment
Спасибо за ответ! Ненавижу говорить, что что-то невозможно, но ...   -  person Dan B    schedule 16.02.2017


Ответы (2)


Некоторые варианты я вижу:

  • обратитесь в службу поддержки хостера для установки VC ++ на сервер
  • обратитесь в службу поддержки Chilkat
  • развернуть на локальном сервере и включить Fusion (http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.80).aspx)
person Dan    schedule 15.07.2011
comment
Отличные предложения, спасибо. Мы работали с GoDaddy, или, как я люблю называть их NoGoDaddy .... ;-), и они не принимали в этом участия ... К вашему сведению, если вы хотите использовать MVC или C #, избегайте NoGoDaddy, поскольку они на самом деле его не поддерживают , что бы они ни говорили на своем сайте ... Azure великолепен ... AWS якобы тоже хорош ... - person Dan B; 16.02.2017

Вы можете добавить библиотеки DLL в корневой проект. Затем щелкните каждую dll - ›щелкните свойства -› установите «Действие сборки»: «Содержимое» и установите «Копировать в выходной каталог»: «Копировать всегда».

Теперь собери и проверь свою корзину. dll есть.

Я использовал этот способ, так как добавлял ссылки как существующие элементы и просматривал библиотеки DLL давал некоторые ошибки, из-за которых не удалось загрузить DLL.

Мне нравилось группировать библиотеки DLL в папку, а затем помещать их в корзину без родительской папки, но пока не мог до этого добраться.

person Salma Tofaily    schedule 27.01.2021