4

Visual Studio 2013 では、Nuget にある OData Client Code Generator を使用して OData V4 エンドポイントを使用しています。予期せず、今週 t4 テンプレートでエラーが発生しました: タイプ 'Microsoft.OData.Edm.Csdl.CsdlSemantics.UnresolvedType' のオブジェクトをタイプ 'Microsoft.OData.Edm.IEdmCollectionType' にキャストできません。

私が使用している 7 つの OData エンドポイントがあり、*.tt ファイルの再保存が必要なバックエンドの更新があったのはそのうちの 1 つだけでした。保存時にエラーが表示され、出力 *.cs ファイルが空白のままになりました。次に、OData エンドポイントでモデルが変更されていない *.tt ファイルの 1 つを保存して、その動作を確認してみました。おそらく、エンドポイントでのモデルの変更は、何らかの形でクライアント コード ジェネレーターと互換性がないのではないかと考えられました。残念ながら、それは失敗し、同じエラーで空の *.cs ファイルも生成されました。

幸いなことに、すべてが git でバージョン管理されており、ファイルをロールバックしてプロジェクトを実行し続けることができました。

他の誰かが OData クライアント コード ジェネレーターをアップグレードしてイライラした場合に備えて、これをここに配置します。

4

1 に答える 1

7

問題は、OData クライアント T4 テンプレート バージョンからのアップグレードであることが判明しました。2.2.0 から OData クライアント T4 テンプレート ver. 2.4.0

バージョン間にいくつかの新しい項目が追加され、古い *.TTInclude ファイルが役に立たなくなります。

問題を解決する手順

  • MetadataDocumentUri や NamespacePrefix などの古い *.tt ファイルから設定をコピーするだけです。
  • *.ttinclude は互換性がなくなったため、古い *.tt ファイルと *.ttinclude ファイルを削除します。
  • 目的の名前で新しいファイルを作成します ([追加] > [新しいアイテム] > [OData クライアント] を使用)。
  • 以前にコピーした設定を所定の位置に貼り付け、保存を押します

上記の手順で問題が解決するはずです。

ttincludes の 1 つの diff で気づいた変更のいくつか。

新しい名前空間が ttinclude に追加されました

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

新しい DeclaredValueTerm が追加されました。

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

新しい抽象メソッド:

internal abstract void WriteEntityTypeAttribute();

また、以前のテンプレートを無効にするその他のいくつかの項目。これが、OData V4 用の OData クライアント コード ジェネレーターをアップグレードするすべての人に役立つことを願っています。

于 2015-09-22T21:11:55.350 に答える