Windows Azure не находит DLL проекта C ++ / CLI

У меня есть проект C ++ / CLI, который охватывает неуправляемую библиотеку сжатия C, и на этот проект ссылается проект MVC3, который вызывает функцию сжатия C ++.

Все отлично работает локально, но когда я публикую решение в облаке Azure, я получаю сообщение об ошибке, в котором говорится, что он не может найти модуль / dll:

Could not load file or assembly 'LZGEncoder.DLL' or one of its dependencies. The specified module could not be found.

Почему он не может найти файл DLL? это идет в неправильное место или компилируется вообще? Есть ли способ проверить? Спасибо!

 Security Hound20 июн. 2012 г., 17:00
Не похоже, что ваш проект представляет собой сборку X64, поэтому не удается загрузить справочную библиотеку

Ответы на вопрос(4)

Решение Вопроса

что библиотеки Visual C ++ 2010 Runtime отсутствовали на стороне облака.

Что я сделал, так это добавил в проект распространяемый пакет Visual C ++ 2010 вместе со сценарием для автоматической установки его при запуске, а теперь и работы нативной библиотеки DLL. Это также необходимо, если вы используете нативные библиотеки Cll.

Steps:

1) Загрузите распространяемый пакет Visual C ++ 2010 и добавьте его в свой проект.

2) Создайте новый пакетный файл и добавьте его в него:
vcredist_x64.exe /q /norestart<br>exit /b 0

3) Откройте ServiceDefinition.csdef файл и добавьте его под соответствующий элемент WebRole:

<Startup>
  <Task commandLine="InstallVCRedist.bat" executionContext="elevated" taskType="simple" />  
</Startup>  

ОБНОВИТЬ
Visual C ++ 2012 отсутствует, и тот же сценарий работает, хотя каждый должен убедиться, что Azure работает по крайней мере Windows Server 2008 R2, иначе задача запуска будет зависать, и роль никогда не запустится (пока вы не уничтожите процесс vcredist в диспетчере задач через RDP).

 newman21 апр. 2014 г., 23:35
Как добавить ServiceDefinition.csdef в мой существующий проект в веб-версии VS 2012 Express?
 Shahin Dohan01 мая 2014 г., 08:31
@ miliu Неважно, куда ты их положил. Я скопировал оба файла в корневую папку моего решения, а затем добавил их в свое решение через Visual Studio. Папка bin содержит выходные данные сборки, вы не должны помещать туда статичные данные, «всегда копировать» - это то, что в конечном итоге копирует файл в папку bin.
 newman01 мая 2014 г., 05:24
Можете ли вы быть конкретным, где поставить vcredist_x64.exe и установить VCRedist.bat? В каком проекте и папке? Я помещаю их в папку bin проекта asp.net и помечаю их как «всегда копировать», но, похоже, это не работает. Не уверен, как отладить проблему. Любой совет очень ценится!

которая существует на живом сервере. Если вы добавляете ссылку из вашего локального источника, и это местоположение не существует в прямом эфире, вы не можете создать код в прямом эфире. Поэтому убедитесь, что все dll существуют в прямом эфире, прежде чем развертывать код в прямом эфире.

что находится на виртуальной машине Azure, просто попробуйте разархивировать файл CSPKG, а затем снова разархивировать файл .CSSX (просто переименуйте CSSX в zip) и убедитесь, что все ссылки есть. Таким образом, вы можете сопоставить то, что на ВМ. После того, как вы проверите, какая DLL отсутствует в VS, выберите опорную DLL и установите для ее свойства «Копировать локальный» значение «True».

 Shahin Dohan21 июн. 2012 г., 17:41
Уже ответил и перечислил шаги, чтобы сделать это, но я должен ждать до завтра, чтобы выбрать свой собственный ответ. Я просто загружаю пакет VC ++ и сценарий для его установки и добавляю задачу запуска в элемент XML WebRole в ServiceDefinition.csdef. Ура!
 Shahin Dohan21 июн. 2012 г., 16:14
Да, это действительно тот случай, когда мне нужны библиотеки времени выполнения VC ++ 2010, или я мог бы скомпилировать проект с VS2008, так как Azure использует старые библиотеки из коробки. Я бы проголосовал за ваш ответ, но пока не могу.
 AvkashChauhan20 июн. 2012 г., 18:59
Да, именно так. При использовании нативной ссылки в управляемом проекте вам нужно будет предоставить все библиотеки DLL, необходимые для вашей нативной ссылки. Также иногда вам может понадобиться установить собственную среду выполнения на виртуальной машине Azure, чтобы получить все собственные ссылки. (это может быть не так, но вы наверняка можете установить рунтин VC ++, чтобы заставить работать нативную ссылку, но все зависит от того, какую нативную ссылку вы используете)
 Shahin Dohan20 июн. 2012 г., 18:50
Я попробую это завтра на работе, спасибо. Когда вы говорите, что отсутствует DLL, вы имеете в виду, что это может зависеть от некоторых других DLL, которые недоступны в облаке, но только локально?
 AvkashChauhan21 июн. 2012 г., 17:25
Спасибо за подтверждение. Я рад, что это сработало для вас. Теперь уверен, как установить среду выполнения VC ++, но вам может потребоваться использовать задачу «Запуск», чтобы выполнить ее на виртуальной виртуальной машине Azure.

что dll C ++ и неуправляемая библиотека C (если это dll, а не просто исходный код) включены в ваш пакет служб, и убедитесь, что компилятор выводит библиотеку C ++ в нужное место.Эта стать имеет приличное прохождение.

Ваш ответ на вопрос