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客户端代码生成器并感到沮丧。
问题原来是升级自: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客户机代码生成器的人有所帮助。