【问题标题】:Unable to cast object of type 'Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType' to type 'Microsoft.OData.Edm.IEdmCollectionType'无法将类型为“Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType”的对象转换为类型“Microsoft.OData.Edm.IEdmCollectionType”
【发布时间】:2015-09-22 21:11:55
【问题描述】:

在 Visual Studio 2013 中,我使用在 Nuget 中找到的 OData 客户端代码生成器来使用 OData V4 端点。出乎意料的是,本周 t4 模板给出了错误:无法将“Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType”类型的对象转换为“Microsoft.OData.Edm.IEdmCollectionType”类型。

我正在使用 7 个 OData 端点,其中只有一个在后端有更新,需要重新保存 *.tt 文件。保存后出现错误并将输出 *.cs 文件留空。然后,我尝试在 OData 端点保存没有模型更改的 *.tt 文件之一,以查看它的行为方式。思考的过程是,端点处模型的更改可能与客户端代码生成器不兼容。不幸的是,一个失败并产生了一个空白的 *.cs 文件以及同样的错误。

幸运的是,所有内容都使用 git 进行了版本控制,我能够回滚文件以保持项目运行。

将其放在这里以防其他人升级其 OData 客户端代码生成器并感到沮丧。

【问题讨论】:

    标签: c# visual-studio odata odata-v4


    【解决方案1】:

    问题原来是从以下升级: OData 客户端 T4 模板版本。 2.2.0 到 OData 客户端 T4 模板版本。 2.4.0

    在版本之间添加了一些新项目,使您的旧 *.TTInclude 文件无用。

    解决问题的步骤

    • 您可以简单地从旧的 *.tt 文件(如 MetadataDocumentUri 和 NamespacePrefix)复制您的设置
    • 删除旧的 *.tt 文件和 *.ttinclude 文件,因为 *.ttinclude 不再兼容
    • 使用所需名称创建一个新文件(使用添加 > 新项目 > OData 客户端)
    • 将之前复制的设置粘贴到位,然后点击保存

    以上步骤应该可以解决问题。

    我注意到其中一个 ttinclude 的差异有一些变化。

    一个新的命名空间被添加到了 ttinclude

    <#@ Import Namespace="Microsoft.OData.Edm.Vocabularies.Community.V1" #>
    

    添加了一个新的 DeclaredValueTerm:

    tmp.FindDeclaredValueTerm(AlternateKeysVocabularyConstants.AlternateKeys) != null)
    

    一种新的抽象方法:

    internal abstract void WriteEntityTypeAttribute();
    

    还有其他一些使您之前的模板无效的杂项。希望这对升级 OData V4 的 OData 客户端代码生成器的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-06
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多