特里迪翁:发布时无法加载 .Net dll

9

我正在使用一个 .Net dll Newtonsoft.Json 在我的 C# TBB 中处理组件并生成 Json 数据。我已经将这个 dll 添加到了 GAC [全局程序集缓存] 中,它也可以正常工作。但有时在发布时会出现以下错误:

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.'

但是当我在 Tridion 中预览页面时,它能正常工作。为了解决这个问题,我们重启了 Tridion Services,然后重新发布页面就好了。但这个问题一直反复出现。有没有办法永久解决这个问题?

最近我尝试在一个已经在发布过程中的页面再次进行发布,结果第二次发布尝试返回了上述错误,但第一次发布尝试在第二次失败之后完成并返回了Success。不知道为什么会出现这种奇怪的行为。


2
这听起来可能是一个线程问题,因为预览是单线程的,而发布/渲染是多线程的。你有多少个渲染线程?你可以尝试将其更改为一个线程并重新测试,看看问题是否仍然存在。这不会解决问题,但可能会证明原因。 - Chris Summers
1
你可能想考虑加入Tridion SE网站-很多这些问题都可以在那里得到解答:http://area51.stackexchange.com/proposals/38335/tridion?referrer=eo63snjNlUWNn9xqeeO2NA2 - Chris Summers
嘿@Sunil。我刚注意到这个问题仍然没有解决。下面的任何答案有帮助你解决问题吗?如果是,请通过点击左侧的大复选标记接受该答案。 - Frank van Puffelen
嗨@FrankvanPuffelen。不幸的是,以下答案没有帮助解决问题。 - Sunil Nadar
1
确实听起来你遇到了Bart所描述的问题:DLL存在于某些发布者机器上,但不是所有的。因此,取决于哪个发布者接收您的事务,它可能会成功或失败。由于预览在GUI中运行(很可能没有扩展),因此呈现始终会在那里成功(或始终失败)。 - Frank van Puffelen
嗨@FrankvanPuffelen。我们只有一个发布服务器(即TCM),并且我们已将Newtonsoft.Json DLL添加到GAC中。 我们已经配置了发布服务器以将内容推送到2个不同的目标(发布目标)。 我们在我们的暂存服务器上具有类似的配置,但我们无法复制它。它只能在实时发布服务器(TCM)上重现。 - Sunil Nadar
3个回答

6

有时候您的平台设置不正确。通过右键单击项目并将框架设置为4.0(或兼容的其他版本)来检查这一点,以使用dll。然后,关闭应用程序并尝试再次运行。您的平台可能被设置为.NET Framework 4客户端配置文件。


6
如果不是因为重新启动服务后它的工作表现更好,我本以为这是关于NewtonSoft.Json依赖的程序集。如果有任何这样的程序集,那么它们也需要在GAC中注册。请注意,发布程序进程的应用程序文件夹或探测路径可能与Tridion内核(执行预览)不同。
正如Chris所说,也许这是一个线程问题,但有时候这种奇怪的情况会在内存压力下出现。您可以监视您的发布程序进程的内存使用情况,以查看是否存在泄漏?

2
在这里有类似的想法,唯一想到的是环境是否可能通过多个发布者进行扩展。在这种情况下,每个CM / Publisher服务器都需要在GAC中具有依赖程序集,并在此之后重新启动其服务,否则会发生一些奇怪的事情。 - Bart Koopman

3
融合日志文件可以提供更多有关失败原因的详细信息。您已经使用过这个工具了吗? Fuslogvw.exe (程序集绑定日志查看器) 除此之外,我建议您获取适用于.NET 4.0的最新JSON.NET版本,并确保将正确的版本部署到所有发布服务器上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接