2012-03-28 11 views
9

Ich verwende eine .Net DLL Newtonsoft.Json in my C# TBB, um Komponenten zu verarbeiten und Json-Daten zu generieren. Ich habe diese DLL bereits in GAC[Global Assembly Cache] hinzugefügt, und es funktioniert auch. Aber manchmal funktioniert es nicht und ich erhalte den folgenden Fehler während der Veröffentlichung:Tridion: Kann .Net DLL während der Veröffentlichung nicht laden

JScriptException: Expression 'RenderComponentPresentation()' had error 'Could not load file or assembly 'Newtonsoft.Json, Version=4.0.5.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.'

Aber wenn ich die Seite in Tridion Vorschau funktioniert es gut. Um dieses Problem zu beheben, starten wir die Tridion Services neu, und nach dem Neustart veröffentlichen wir die Seite, die es gut funktioniert. Aber dieses Problem taucht immer wieder auf. Gibt es eine Möglichkeit, dieses Problem dauerhaft zu lösen?

Kürzlich konnte ich Problem reproduzieren, wenn ich die gleiche Seite wieder veröffentlichte, als es bereits im Prozess der Veröffentlichung war. Der zweite Veröffentlichungsversuch gab den obigen Fehler zurück, aber der erste Veröffentlichungsversuch wurde nach dem Fehlschlagen des zweiten Veröffentlichungsversuchs beendet und es wurde Success zurückgegeben. Irgendeine Idee warum dieses seltsame Verhalten.

+2

Das klingt, als könnte es ein Threading-Problem sein, da Vorschau Single-Threaded ist und Publishing/Rendering Multithread ist. Wie viele Render-Threads hast du? Können Sie versuchen, es in eins zu ändern und erneut zu testen, um zu sehen, ob Tee-Problem immer noch auftritt. Dies wird das Problem nicht lösen, aber. Ja, beweisen Sie die Ursache. –

+1

können Sie in Erwägung ziehen, die Tridion SE Website zu verpflichten - Eine Menge dieser Frage wäre dort angebracht: http://area51.stackexchange.com/proposals/38335/tridion?referrer=eo63snjNlUWNn9xqeeO2NA2 –

+0

Hey @Sunil. Ich habe gerade bemerkt, dass diese Frage noch offen ist. Hat eine der folgenden Antworten Ihnen geholfen, das Problem zu lösen? Wenn ja, können Sie diese Antwort akzeptieren, indem Sie auf das große Häkchen links daneben klicken? –

Antwort

6

Manchmal ist Ihre Plattform nicht richtig eingestellt. Überprüfen Sie dies, indem Sie mit der rechten Maustaste auf das Projekt klicken und das Framework auf 4.0 setzen (oder was auch immer kompatibel ist), um die DLL zu verwenden. Schließen Sie dann die Anwendung und versuchen Sie es erneut. Ihre Plattform ist möglicherweise auf das .NET Framework 4-Clientprofil festgelegt.

6

Wenn es nicht nach dem Neustart des Dienstes besser funktionierte, hätte ich gedacht, dass es sich um eine Baugruppe handelt, von der NewtonSoft.Json abhängig ist. Wenn solche Baugruppen vorhanden sind, müssen diese ebenfalls im GAC registriert werden. Beachten Sie, dass der Publisher-Prozess nicht notwendigerweise den gleichen Anwendungsordner oder Sondierungspfad wie der Tridion-Kernel hat (der Vorschaubilder ausführt).

Wie Chris sagt, vielleicht ist das ein Threading-Problem, aber manchmal zeigt sich diese Art von Seltsamkeit unter dem Druck des Speichers. Können Sie den Speicherverbrauch Ihres Publisher-Prozesses überwachen, um festzustellen, ob ein Leck vorliegt?

+2

mit ähnlichen Gedanken hier, das einzige, was in den Sinn kommt, ist, wenn die Umgebung möglicherweise mit mehreren Herausgebern skaliert wird. In diesem Fall benötigt jeder der CM/Publisher-Server die abhängige Assembly in der GAC und die Dienste werden danach neu gestartet, sonst passiert etwas Seltsames. –

3

Die Fusion-Protokolldateien könnten Ihnen genauere Informationen darüber liefern, warum dies fehlschlägt. Hast du dieses Tool schon benutzt?

Fuslogvw.exe (Assembly Binding Log Viewer)

Anders als das ich empfehlen, sich die neuesten JSON.NET Versionen für .NET 4.0 und stellen Sie sicher, dass Sie die richtigen Versionen auf alle veröffentlichen Servern bereitgestellt.

Verwandte Themen