2012-04-03 4 views
19

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

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

Не удалось загрузить файл или сборку 'CrystalDecisions.ReportAppServer.ClientDoc, Version = 13.0.2000.0, Culture = нейтрально, PublicKeyToken = 692fbea5521e1304' или один из его зависимостей. Система не может найти указанный файл.

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

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

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

+0

В нескольких сторонних DLL, с которыми я работал, PublicKeyToken отличается для 32-разрядных и 64-разрядных версий. Если он работает на одной машине, но не на другой, это может быть какое-то место для поиска. это просто догадка, хотя ... – David

+0

Ну, файл с этим токеном открытого ключа существует в GAC, точно так, как описано. Я не понимаю, почему мое веб-приложение не может его найти. –

ответ

14

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

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

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

+0

Или, альтернативно: C: \ inetpub \ AdminScripts \ adsutil.vbs SET w3svc/AppPools/Enable32bitAppOnWin64 0 – ariscris

+0

Мой случай был приложением WPF. Чтобы отключить опцию «32-битное предпочтение» в настройках проекта. – RonaldPaguay

3

1) Изменить профиль .net из профиля клиента, чтобы в .Net Framework 4,0 http://msdn.microsoft.com/en-us/library/bb398202.aspx

2) Проверьте свои типы Вставить Interop флаг

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

+0

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

+0

Все мои ссылки уже настроены так, чтобы не вставлять типы Interop. –

+0

ah sorry стоит попробовать –

2

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

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

2

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

+0

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