Unable to cast object of type 'Microsoft.OData.Edm.Csdl.

本文关键字:Microsoft OData Edm Csdl cast to object of type Unable | 更新日期: 2023-09-27 18:13:56

在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客户端代码生成器并感到沮丧。

Unable to cast object of type 'Microsoft.OData.Edm.Csdl.

问题原来是升级自:OData Client T4模板版本。2.2.0来OData Client T4模板版本。测试盒框

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

解决问题的步骤

  • 你可以简单地从旧的*复制你的设置。像MetadataDocumentUri和NamespacePrefix这样的文件
  • 删除旧的*。Tt文件,*。将文件包含为*。ttinclude不再兼容
  • 创建一个具有所需名称的新文件(使用Add> new Item> OData Client)
  • 将之前复制的设置粘贴到适当的位置,并点击保存

以上步骤应能解决问题。

我注意到的一些变化与其中一个包含的差异。

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

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

新增DeclaredValueTerm:

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

一个新的抽象方法:

internal abstract void WriteEntityTypeAttribute();

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