簡體   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