【问题标题】:Tridion: Error loading Assembly 'Tridion.ContentDelivery.Interop'Tridion:加载程序集“Tridion.ContentDelivery.Interop”时出错
【发布时间】:2012-09-18 07:00:06
【问题描述】:

我们正在将 VBScript 模板转换为 .net 复合模板,并且在使用 Broker Query Mechanism 时遇到了一些问题。

我们的旧代码如下所示:

sQuery = "query" & nNumber &  ".AddCriteria(""schema"",""="", ""1132"");"& vbcrlf
if objFields.Item("FilterBD").Value.Count >0 Then
     if objFields.Item("FilterBD").Value(1) = "Yes" Then
      sQuery = sQuery & "query" & nNumber & ".AddOperator(Query.QueryOperator.AND_Field);"& vbcrlf
         sQuery = sQuery & "query" & nNumber & ".AddCriteria(""categorization"", ""="", ""Broker_Dealer/test"");" & vbcrlf
     End If
End If

在将其转换为 .net 时,我们在项目中添加了 Tridion.ContentDelivery.DynamicContent dll 的引用,以便我们可以将代码(示例)编写为:

using Tridion.ContentDelivery.DynamicContent.Query;
Tridion.ContentDelivery.DynamicContent.Query.Query query = new Tridion.ContentDelivery.DynamicContent.Query.Query();
ItemSchemaCriteria isArticle = new ItemSchemaCriteria(1132);
CategoryCriteria bdCategory = new CategoryCriteria("Broker_Dealer/\" + \"test\"");
Criteria bdCriteria = CriteriaFactory.And(isArticle, bdCategory);
query.Criteria = bdCriteria;

到目前为止,这种方法在 Visual Studio 中运行良好,但在模板生成器中构建 CT 时,我们收到错误“无法加载文件或程序集‘无法加载文件或程序集’Tridion.ContentDelivery.Interop,版本=6.1.0.43, Culture=neutral, PublicKeyToken=ddfc895746e5ee6b' 或其依赖项之一。系统找不到指定的文件。'

关注these Steps of registering the dlls in GAC后,还是遇到同样的问题?

我们错过了什么?请帮忙。 谢谢。

【问题讨论】:

  • 您是否将 Tridion.ContentDelivery.Interop.dll 放入您的 Web 应用程序的 bin 文件夹中?
  • 您是否在 CT 的 .Net TBB 中使用此命名空间?如果是这样,那么您在错误的地方使用它。 Tridion.ContentDelivery.DynamicContent 是一个内容交付命名空间(名称中的线索),不应直接在模板中使用。
  • 您好 Quirijn:是的,该文件已经存在于 Bin 文件夹中。 @Jeremy:还有其他选择吗?我需要使用查询类(可以在我的帖子中看到)。如何在我的模板中使用查询类?
  • @HustonLopes 在模板代码中使用查询类没有意义。我希望您了解 Query 类是从内容交付系统获取数据,并且在发布期间在 CMS 系统上工作的模板代码。无论如何你想达到什么目标?
  • @vikaskumar :是的,我在我的模板中的 StringBuilder 中将代码作为字符串传递。但出于测试目的,我已将查询代码添加到我的模板中,以便我可以轻松构建我的字符串。

标签: tridion tridion-2011 tridion-content-delivery


【解决方案1】:

如果您需要查询代理,那么 .Net TBB 不是这样做的地方。在您的 VBSscript 模板中,您似乎一直在将服务器端代码写入输出,这是正确的方法。在您的模块化模板中,您应该采用相同的方法 - 写出适当的 .Net 代码,或者可能是更好的方法,写出 .Net 控制标记,当 IIS 处理该标记时,将直接调用 CD API。

【讨论】:

  • 您好 Jeremy,我采用的方法与我们的旧 CT 相同。但是,由于查询机制被代理查询机制取代,我试图找到一些替代方法 'Query.Match, Query.AddSelectString' ,替代 SearchFilter 等。
  • 您的问题并未反映这一点。在这种情况下,我通常会在我的 Web 服务器(CD 实例)上创建一个页面,然后直接在其中编写 CD 代码。一旦我让它工作,我就会根据需要将它反向工程回我的模板中。如果您在使用 API 时遇到问题,请提出另一个更具体的问题。
  • 谢谢杰里米,问题之一已经在这里:stackoverflow.com/questions/12390664/…
【解决方案2】:

如果您确定 bin 文件夹中存在 Interop dll,我唯一能想到的是它是错误的版本。你能确定 DLL 的版本是 6.1.0.43 吗?

【讨论】:

  • 是的已验证 :) 我现在不测试此方法 :( 。而是将专注于按照 Jeremy 的建议构建 .net 字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多