2012-04-03 1 views
19

Ich habe ähnliche Fragen zu SO untersucht, aber nichts entspricht meinem Problem, soweit ich das beurteilen kann.Datei oder Assembly konnte nicht geladen werden. CrystalDecisions.ReportAppServer.ClientDoc

Die Ausnahmemeldung:

konnte nicht geladen werden Datei oder Assembly 'CrystalDecisions.ReportAppServer.ClientDoc, Version = 13.0.2000.0, Culture = neutral, PublicKeyToken = 692fbea5521e1304' oder eine ihrer Abhängigkeiten. Die angegebene Datei wurde vom System nicht gefunden.

Die Datei ist in meinem GAC. Ich entwickle auf einer 32-Bit-Maschine (Windows 7) mit VS2010, alles ist .NET4. Der Zielhosting-Rechner ist 64-Bit Win 2008 R2. Mein lokaler Rechner hat die CR-Installation für VS2010; Der Hostcomputer hat die 64-Bit-Laufzeiten für VS2010. Ich kompiliere meinen gesamten Code im "Any CPU" -Modus für diese Webanwendung.

Es bläst mir in den Sinn, dass es die Datei im GAC nicht finden kann. Dies ist eine IIS-Anwendung. Gibt es eine Art von Berechtigungsproblem? Ich würde denken, dass IIS Zugang zum GAC haben würde.

Einige Vorschläge, was zu tun wäre, würden geschätzt.

+0

In mehreren Drittanbieterdlls, mit denen ich gearbeitet habe, ist das PublicKeyToken für die 32-Bit- und 64-Bit-Versionen unterschiedlich. Wenn es auf einer Maschine funktioniert, aber nicht auf der anderen, kann dies an einer Stelle zu suchen sein. es ist nur eine Vermutung, obwohl ... – David

+0

Nun die Datei mit diesem öffentlichen Schlüssel Token existieren in der GAC, genau wie beschrieben. Ich verstehe nicht, warum meine Webanwendung es nicht finden kann. –

Antwort

14

Es stellt sich die Antwort aus war lächerlich einfach, aber mystifizierend, warum es notwendig war.

Im IIS-Manager auf dem Server habe ich den Anwendungspool für meine Webanwendung so eingestellt, dass keine 32-Bit-Assemblys zulässig sind.

Es scheint, dass auf einem 64-Bit-System angenommen wird, dass Sie die 32-Bit-Assembly möchten. Bizarr.

+0

Oder alternativ: C: \ inetpub \ AdminScripts \ adsutil.vbs SET w3svc/AppPools/Enable32bitAppOnWin64 0 – ariscris

+0

Mein Fall war eine WPF-Anwendung. Musste die "32-bit Preference" Option in den Projekteinstellungen deaktivieren. – RonaldPaguay

3

1) Ändern Sie Ihre .net Profil von Client-Profil auf .Net Framework 4,0 http://msdn.microsoft.com/en-us/library/bb398202.aspx

2) Überprüfen Sie die Embed Interop-Typen Flagge

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

Alle meine Projekte verwenden das 4.0-Profil bereits; Ich hatte nie viel Erfolg mit dem Kundenprofil (weiß nicht, warum das ein Standard für jedes Projekt ist). Ich werde die Interop-Einstellungen morgen früh überprüfen. –

+0

Alle meine Referenzen sind bereits so eingestellt, dass sie keine Interop-Typen einbetten. –

+0

ah Entschuldigung einen Versuch wert –

2

In Bezug auf das 64-Bit-System wollen 32-Bit-Unterstützung. Ich finde es nicht so seltsam:

Obwohl es auf einem 64-Bit-System bereitgestellt wird, bedeutet dies nicht, dass alle referenzierten Assemblies notwendigerweise 64-Bit-Crystal Reports-Assemblys sind. Darüber hinaus sind die Crystal Reports-Assemblies größtenteils nur Wrapper für eine Sammlung von Legacy-DLLs, auf denen sie basieren. Viele 32-Bit-DLLs werden von der primär referenzierten Assembly benötigt. Die Fehlermeldung "kann die Assembly nicht laden" beinhaltet auch diese DLLs. Um visuell zu sehen, was diese sind, gehen Sie zu www.dependencywalker.com und führen Sie "Depends" auf der betreffenden Assembly direkt auf diesem IIS-Server aus.

2

Sie müssen einfach Crystal Report Report Run Time Downloads auf Deployment Server installieren. Wenn das Problem weiterhin auftritt, legen Sie den Ordner asp_client im Hauptordner Ihres Projekts ab.

+0

Es sollte funktionieren, ohne die Laufzeitumgebung zu installieren. Was ist die Lösung, wenn Sie Ihre Website auf dem Cloud-Server ausführen und keinen Zugriff auf den Desktop haben? Was ist mit Komponententests? –