【问题标题】:Error "Unable to load requested types" when uploading DD4T.Templates.dll using TcmUploadAssembly使用 TcmUploadAssembly 上传 DD4T.Templates.dll 时出现“无法加载请求的类型”错误
【发布时间】:2012-04-04 21:08:44
【问题描述】:

尝试使用 DD4T Tridion Tools 文件夹中的 TcmUploadAssembly 将 DD4T.Templates.dll 重新上传到 Tridion 2011 SP1 - 我已确保上传了必要的 DLL - DD4T.ContentModel.Contracts.dll、DD4T.ContentModel.dll , DD4T.Templates.Base.dll - 但我不断收到“错误:无法再加载一种请求的类型”。

查看Fusion日志,可以看到如下绑定问题:

LOG: DisplayName = TcmUploadAssembly.XmlSerializers, Version=5.4.0.509, Culture=neutral, PublicKeyToken=360aac4d3354074b, processorArchitecture=MSIL
 (Fully-specified)
LOG: Appbase = file:///D:/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = TcmUploadAssembly.exe
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v2.0.50727\config\machine.config.
LOG: Post-policy reference: TcmUploadAssembly.XmlSerializers, Version=5.4.0.509, Culture=neutral, PublicKeyToken=360aac4d3354074b, processorArchitecture=MSIL
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///D:/TcmUploadAssembly.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///D:/TcmUploadAssembly.XmlSerializers/TcmUploadAssembly.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///D:/TcmUploadAssembly.XmlSerializers.EXE.
LOG: Attempting download of new URL file:///D:/TcmUploadAssembly.XmlSerializers/TcmUploadAssembly.XmlSerializers.EXE.
LOG: All probing URLs attempted and failed.

不知道这个 TcmUploadAssembly.XmlSerializers 来自哪里?

构建文件夹中有一个 DD4T.ContentModel.XmlSerializers.dll,但它似乎与其他文件夹合并形成 DD4T.Templates.merged.dll - 但我不知道这是做什么用的。

不确定从哪里开始 - 这是 DD4T 问题还是 TcmUploadAssembly 问题? (我在 Tridion 2011 SP1 安装中尝试了 TcmUploadAssembly 相同的步骤,但得到了相同的错误,尽管是更新的 TcmUploadAssembly.XmlSerializers,版本 6.1.0.996)

编辑 为混淆道歉 - 我已将 DD4T 程序集添加到 GAC 中。我原来的帖子“我已确保上传了必要的 DLL”具有误导性,但我的意思是加载到 GAC 中!

我会检查一下 Mihai 关于注册 .NET 4 的观点 - 昨晚我这样做的时候已经很晚了!

【问题讨论】:

  • 对于 DD4T 模板,GAC 中是否应该包含一些内容?
  • 没有办法让您上传到 TCM 的一个 DLL 引用您上传到 TCM 的另一个 DLL。这就是为什么通常必须将任何通用功能放入 GAC 的原因,正如 Nuno 和 Mihai 所指出的那样(正如 Mihai 所指的 DD4T 页面上所记录的那样)。

标签: tridion


【解决方案1】:

版本 5.4 是 Tridion 2009。我认为使用 T2009 中的 TcmUploadAssembly 不适用于 T2011。所以我绝对建议使用最新的 TcmUploadAssembly(T2011SP1 的 v6.1.0.966)。

您是否已将模板 DLL DD4T.ContentModel.Contracts.dllDD4T.ContentModel.dllDD4T.Templates.Base.dll 注册到 TCM 服务器上的 GAC 中?仅仅上传它们是不够的。看看http://code.google.com/p/dynamic-delivery-4-tridion/wiki/40_Templates

我还看到您的错误是指 .NET 2。您是否使用 .NET 4 注册了 DLL?

【讨论】:

  • 或者,您可以使用 DD4T 模板安装程序。它将所有必需的 DLL(DD4T.ContentModel、DD4T.ContentModel.Contracts 和 DD4T.Templates.Base)与实际模板合并到一个 DLL 中,然后上传。在这种情况下,您无需在 GAC 中添加任何内容。安装程序可以从 code.google.com/p/dynamic-delivery-4-tridion/downloads/list 下载为 zip。
【解决方案2】:

推荐的方法是从https://code.google.com/p/dynamic-delivery-4-tridion/downloads/detail?name=DD4T-template-installer-1.31.zip 下载安装程序。 这会将 DD4T.Templates.Merged.dll 上传到 Tridion,其中包括模板 DLL + 所有由 ILMerge 合并在一起的依赖 DLL。

如果您出于某种原因不喜欢 ILMerge,可以将以下 DLL 放入 GAC:

  • DD4T.ContentModel.dll
  • DD4T.ContentModel.Contracts.dll
  • DD4T.Templates.Base.dll
  • DD4T.ContentModel.XmlSerializers.dll

您可以通过下载源代码、打开 Dynamic Delivery Publishing.sln 解决方案并构建它来获取这些 DLL。

【讨论】:

    猜你喜欢
    • 2015-11-28
    • 1970-01-01
    • 2012-05-07
    • 2017-08-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多