繁体   English   中英

无法将类型为“Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType”的对象强制转换为“Microsoft.OData.Edm.IEdmCollectionType”

[英]Unable to cast object of type 'Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType' to type 'Microsoft.OData.Edm.IEdmCollectionType'

在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 Template ver。 2.2.0到OData客户端T4模板版本。 2.4.0

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

解决问题的步骤

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

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

我注意到其中一个变化的一些变化。

在ttinclude中添加了一个新的命名空间

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

添加了一个新的DeclaredValueTerm:

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

一种新的抽象方法:

internal abstract void WriteEntityTypeAttribute();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM