Вопрос по asp.net-mvc, c#, crystal-reports – Не удалось загрузить файл или сборку CrystalDecisions.ReportAppServer.ClientDoc

22

Я рассмотрел похожие вопросы по SO, но, насколько я могу судить, ничто не соответствует моей проблеме.

Сообщение об исключении:

Could not load file or assembly 'CrystalDecisions.ReportAppServer.ClientDoc, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.

Файл находится в моем GAC. Я занимаюсь разработкой на 32-битной машине (Windows 7) под управлением VS2010, все .NET4. Целевым хостингом является 64-битный Win 2008 R2. Моя локальная машина имеет установку CR для VS2010; хост-машина имеет 64-битное время выполнения для VS2010. Я компилирую весь свой код в «Любой процессор» режим для этого веб-приложения.

Я поражаюсь, что не могу найти файл в GAC. Это приложение IIS; есть ли какая-то проблема с разрешениями? Я думаю, что IIS будет иметь доступ к GAC.

Некоторые предложения о том, что делать, будут оценены.

Ну, файл с этим токеном открытого ключа существует в GAC, в точности как описано. Я не понимаю, почему мое веб-приложение не может его найти. Jeremy Holovacs
В некоторых сторонних библиотеках, с которыми я работал, PublicKeyToken отличается для 32-битной и 64-битной версий. Если это работает на одной машине, но не на другой, это может быть где-то посмотреть. это только предположение, хотя ... David

Ваш Ответ

4   ответа
2

Что касается 64-битной системы, желающей 32-битной поддержки. Я не нахожу это настолько странным:

Хотя развертывание выполняется в 64-битной системе, это не означает, что все ссылочные сборки обязательно являются 64-битными сборками Crystal Reports. В дополнение к этому сборки Crystal Reports в основном являются просто оболочками для коллекции устаревших библиотек DLL, на которых они основаны. Многие 32-разрядные библиотеки DLL требуются для сборки, на которую ссылаются в первую очередь. Сообщение об ошибке «не удается загрузить сборку» включает в себя эти библиотеки DLL, а также. Чтобы наглядно увидеть, что это такое, перейдите на www.dependencywalker.com и запустите «Зависит». в рассматриваемой сборке непосредственно на этом сервере IIS.

2

Вам просто нужно установитьВремя выполнения отчета Crystal Report загрузка на сервере развертывания. Если проблема все еще появляется, поместите папку проверки asp_client в основную папку вашего проекта.

Он должен работать без установки среды выполнения. Каково решение, если ваш веб-сайт работает на облачном сервере, и у вас нет доступа к рабочему столу? Как насчет юнит-тестирования?
14

Оказывается, ответ был смехотворно простым, но загадочным, почему это было необходимо.

В диспетчере IIS на сервере я установил пул приложений для своего веб-приложения, чтобы он не разрешал 32-разрядные сборки.

Кажется, в 64-битной системе предполагается, что вам нужна 32-битная сборка. Bizarre.

Или альтернативно: C: \ inetpub \ AdminScripts \ adsutil.vbs SET w3svc / AppPools / Enable32bitAppOnWin64 0
Мой случай был заявлением WPF. Пришлось отключить «32-битное предпочтение» опция в настройках проекта.
3

1) Измените свой профиль .net с профиля клиента на .Net Framework 4.0 http://msdn.microsoft.com/en-us/library/bb398202.aspx

2) Проверьте свой флаг Embed Interop Types

Embed Interop Types flag http://weblogs.asp.net/cazzu/archive/2011/03/11/check-your-embed-interop-types-flag-when-doing-visual-studio-extensibility-work.aspx

Все мои проекты уже используют профиль 4.0; Я никогда не имел большого успеха с профилем клиента (не знаю, почему это по умолчанию для любого проекта). Я проверю настройки взаимодействия завтра утром. Jeremy Holovacs
Все мои ссылки уже настроены так, чтобы не вставлять Interop Types. Jeremy Holovacs
ах извините стоит попробовать

Похожие вопросы