Tridion:发布时无法加载.Net dll

Tridion:发布时无法加载.Net dll,.net,json.net,tridion,tridion2009,assembly-loading,.net,Json.net,Tridion,Tridion2009,Assembly Loading,我在C#TBB中使用.Net dllNewtonsoft.Json来处理组件并生成Json数据。我已经在GAC[Global Assembly Cache]中添加了这个dll,它也可以工作。但有时它不起作用,我在发布时会出现以下错误: JScript异常:表达式“RenderComponentPresentation()”出现错误“无法加载文件或程序集”Newtonsoft.Json,Version=4.0.5.0,Culture=neutral,PublicKeyToken=30ad4fe6b

我在C#TBB中使用.Net dll
Newtonsoft.Json来处理组件并生成Json数据。我已经在GAC[Global Assembly Cache]
中添加了这个dll,它也可以工作。但有时它不起作用,我在发布时会出现以下错误:

JScript异常:表达式“RenderComponentPresentation()”出现错误“无法加载文件或程序集”Newtonsoft.Json,Version=4.0.5.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”或其依赖项之一。系统找不到指定的文件。“

但当我在Tridion中预览页面时,效果很好。为了解决这个问题,我们重新启动Tridion服务,重新启动后,我们发布页面,它工作正常。但这个问题一再出现。有没有办法永久解决这个问题


最近,当我再次发布同一个页面时,我可以复制这个问题,而这个页面已经在发布过程中了。第二次发布尝试返回了上述错误,但第一次发布尝试在第二次发布尝试失败后完成,并返回了
Success
。你知道为什么会有这种奇怪的行为吗。

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

如果不是因为重新启动服务后工作更好,我会认为这是关于NewtonSoft.Json所依赖的程序集。如果存在任何此类程序集,则它们也需要在GAC中注册。请注意,发布者进程不一定与Tridion内核(执行预览)具有相同的应用程序文件夹或探测路径


正如Chris所说,这可能是一个线程问题,但有时这种奇怪的情况会在内存压力下出现。您能否监视publisher进程的内存使用情况以查看是否存在泄漏?

fusion日志文件可以为您提供有关失败原因的更多详细信息。你已经用过这个工具了吗


除此之外,我建议获取.NET 4.0的最新JSON.NET版本,并确保将正确的版本部署到所有发布服务器。

这听起来可能是一个线程问题,因为预览是单线程的,而发布/呈现是多线程的。你有多少渲染线程?您能否尝试将其更改为1并重新测试,以查看T形三通问题是否仍然存在。这不会解决问题,但是。AYE证明原因。你可能想考虑提交到Trdion SE网站-很多这些问题在那里是合适的:嘿@ Sunil。我只是注意到这个问题仍然悬而未决。下面的答案是否有助于您解决问题?如果是这样的话,你能通过点击左边的大复选标记来接受这个答案吗。不幸的是,下面的答案无助于解决这个问题。这听起来确实很有可能是巴特所描述的:DLL存在于一些(但不是所有)发行者机器上。因此,根据哪个发布者接收您的事务,它可能成功或失败。由于预览在GUI中运行(很可能不会缩小),因此渲染将始终成功(或始终失败)。在这里有类似的想法,唯一让人想到的是,如果环境可能与多个发布者一起缩小。在这种情况下,每个CM/Publisher服务器都需要GAC中的依赖程序集,并在之后重新启动其服务,否则会发生wierd事件。